simplex-web 0.2.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 (91) hide show
  1. simplex/README.md +32 -0
  2. simplex/cli/README.md +13 -0
  3. simplex/cli/__init__.py +5 -0
  4. simplex/cli/commands.py +384 -0
  5. simplex/deck/README.md +19 -0
  6. simplex/deck/__init__.py +7 -0
  7. simplex/deck/_template/assets/.gitkeep +0 -0
  8. simplex/deck/_template/assets/code/.gitkeep +0 -0
  9. simplex/deck/_template/assets/figures/.gitkeep +0 -0
  10. simplex/deck/_template/deck.toml +11 -0
  11. simplex/deck/_template/manim.cfg +3 -0
  12. simplex/deck/_template/notes.md +27 -0
  13. simplex/deck/_template/refs.bib +12 -0
  14. simplex/deck/_template/slides/__init__.py +7 -0
  15. simplex/deck/_template/slides/intro.py +21 -0
  16. simplex/deck/config.py +207 -0
  17. simplex/deck/registry.py +110 -0
  18. simplex/deck/scaffold.py +86 -0
  19. simplex/deck/section.py +40 -0
  20. simplex/engine/README.md +9 -0
  21. simplex/render/README.md +46 -0
  22. simplex/render/__init__.py +1 -0
  23. simplex/render/html.py +132 -0
  24. simplex/render/pdf.py +32 -0
  25. simplex/render/pptx.py +32 -0
  26. simplex/render/reconcile.py +350 -0
  27. simplex/render/runner.py +116 -0
  28. simplex/render/thumbnail.py +374 -0
  29. simplex/slides/README.md +9 -0
  30. simplex/slides/components/README.md +9 -0
  31. simplex/theme/README.md +9 -0
  32. simplex/web/README.md +33 -0
  33. simplex/web/__init__.py +1 -0
  34. simplex/web/bibliography.py +248 -0
  35. simplex/web/bibtex.py +129 -0
  36. simplex/web/builder.py +321 -0
  37. simplex/web/callouts.py +134 -0
  38. simplex/web/citations.py +118 -0
  39. simplex/web/equations.py +79 -0
  40. simplex/web/notes.py +135 -0
  41. simplex/web/refs.py +60 -0
  42. simplex/web/sidenotes.py +76 -0
  43. simplex/web/site_config.py +71 -0
  44. simplex/web/slide_ref.py +54 -0
  45. simplex/web/static/.gitkeep +0 -0
  46. simplex/web/static/README.md +23 -0
  47. simplex/web/static/fonts/lato/lato-latin-400-italic.woff2 +0 -0
  48. simplex/web/static/fonts/lato/lato-latin-400-normal.woff2 +0 -0
  49. simplex/web/static/fonts/lato/lato-latin-700-italic.woff2 +0 -0
  50. simplex/web/static/fonts/lato/lato-latin-700-normal.woff2 +0 -0
  51. simplex/web/static/fonts/lato/lato-latin-900-normal.woff2 +0 -0
  52. simplex/web/static/fonts/merriweather/merriweather-latin-400-italic.woff2 +0 -0
  53. simplex/web/static/fonts/merriweather/merriweather-latin-400-normal.woff2 +0 -0
  54. simplex/web/static/fonts/merriweather/merriweather-latin-700-italic.woff2 +0 -0
  55. simplex/web/static/fonts/merriweather/merriweather-latin-700-normal.woff2 +0 -0
  56. simplex/web/static/fonts/merriweather/merriweather-latin-900-normal.woff2 +0 -0
  57. simplex/web/static/htmx.min.js +1 -0
  58. simplex/web/static/katex/auto-render.min.js +1 -0
  59. simplex/web/static/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  60. simplex/web/static/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
  61. simplex/web/static/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
  62. simplex/web/static/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  63. simplex/web/static/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
  64. simplex/web/static/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  65. simplex/web/static/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  66. simplex/web/static/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  67. simplex/web/static/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  68. simplex/web/static/katex/katex.min.css +1 -0
  69. simplex/web/static/katex/katex.min.js +1 -0
  70. simplex/web/static/lucide/README.md +7 -0
  71. simplex/web/static/lucide/lucide.min.js +12 -0
  72. simplex/web/static/notes.js +68 -0
  73. simplex/web/static/reveal.js/reset.css +30 -0
  74. simplex/web/static/reveal.js/reveal.css +8 -0
  75. simplex/web/static/reveal.js/reveal.js +9 -0
  76. simplex/web/static/simplex.css +1870 -0
  77. simplex/web/static/tailwind.js +64 -0
  78. simplex/web/static/viewer.js +428 -0
  79. simplex/web/templates/README.md +19 -0
  80. simplex/web/templates/_carousel.html +117 -0
  81. simplex/web/templates/base.html +110 -0
  82. simplex/web/templates/deck.html +149 -0
  83. simplex/web/templates/index.html +20 -0
  84. simplex/web/templates/revealjs.html.j2 +374 -0
  85. simplex/web/templates/section.html +74 -0
  86. simplex/web/vendor.py +148 -0
  87. simplex_web-0.2.0.dist-info/METADATA +166 -0
  88. simplex_web-0.2.0.dist-info/RECORD +91 -0
  89. simplex_web-0.2.0.dist-info/WHEEL +4 -0
  90. simplex_web-0.2.0.dist-info/entry_points.txt +2 -0
  91. simplex_web-0.2.0.dist-info/licenses/LICENSE +21 -0
simplex/web/vendor.py ADDED
@@ -0,0 +1,148 @@
1
+ """Fetch vendored runtime assets (tailwind, katex, reveal.js, fonts) into the
2
+ package static dir.
3
+
4
+ Pinned versions are intentional so builds are reproducible. Mirrors
5
+ `scripts/vendor.sh` so Windows users (or anyone without bash) get the same
6
+ assets via plain `uv run simplex build`.
7
+
8
+ Idempotent: files that already exist are not re-downloaded.
9
+
10
+ Fonts come from the ``@fontsource`` packages on jsDelivr -- stable WOFF2
11
+ URLs that ship with semver-pinned releases (unlike Google Fonts' rolling
12
+ ``fonts.gstatic.com`` paths). We bundle Lato (UI / headings) and
13
+ Merriweather (body / academic notes) to match the deck-notes academic
14
+ typography stack.
15
+ """
16
+
17
+ import warnings
18
+ from pathlib import Path
19
+ from urllib.error import URLError
20
+ from urllib.request import Request, urlopen
21
+
22
+ TAILWIND_VER = "3.4.4"
23
+ KATEX_VER = "0.16.11"
24
+ REVEAL_VER = "5.1.0"
25
+ HTMX_VER = "1.9.12"
26
+ LATO_VER = "5.0.18"
27
+ MERRIWEATHER_VER = "5.0.13"
28
+ LUCIDE_VER = "1.16.0"
29
+
30
+ _UNPKG = "https://unpkg.com"
31
+ _JSDELIVR = "https://cdn.jsdelivr.net/npm"
32
+ _TAILWIND_CDN = "https://cdn.tailwindcss.com"
33
+
34
+ _STALE_PATHS = (
35
+ # Reveal's `black.css` theme used to live here; it `@import`s
36
+ # `fonts/source-sans-pro/source-sans-pro.css` which we don't vendor,
37
+ # producing a 404. The inline <style> block in revealjs.html.j2 supplies
38
+ # every visual we need, so we no longer ship a theme file at all.
39
+ "reveal.js/theme/simplex.css",
40
+ )
41
+
42
+ _KATEX_FONTS = (
43
+ "KaTeX_Main-Regular.woff2",
44
+ "KaTeX_Main-Bold.woff2",
45
+ "KaTeX_Math-Italic.woff2",
46
+ "KaTeX_Math-BoldItalic.woff2",
47
+ "KaTeX_AMS-Regular.woff2",
48
+ "KaTeX_Size1-Regular.woff2",
49
+ "KaTeX_Size2-Regular.woff2",
50
+ "KaTeX_Size3-Regular.woff2",
51
+ "KaTeX_Size4-Regular.woff2",
52
+ )
53
+
54
+ # Per @fontsource convention: <pkg>/files/<family>-<subset>-<weight>-<style>.woff2
55
+ # Subset stays `latin` (covers ASCII + Latin-1 + the common punctuation we use).
56
+ _LATO_FACES = (
57
+ ("400", "normal"),
58
+ ("400", "italic"),
59
+ ("700", "normal"),
60
+ ("700", "italic"),
61
+ ("900", "normal"),
62
+ )
63
+ _MERRIWEATHER_FACES = (
64
+ ("400", "normal"),
65
+ ("400", "italic"),
66
+ ("700", "normal"),
67
+ ("700", "italic"),
68
+ ("900", "normal"),
69
+ )
70
+
71
+
72
+ def _assets() -> tuple[tuple[str, str], ...]:
73
+ items: list[tuple[str, str]] = [
74
+ (f"{_TAILWIND_CDN}/{TAILWIND_VER}", "tailwind.js"),
75
+ (f"{_UNPKG}/katex@{KATEX_VER}/dist/katex.min.css", "katex/katex.min.css"),
76
+ (f"{_UNPKG}/katex@{KATEX_VER}/dist/katex.min.js", "katex/katex.min.js"),
77
+ (
78
+ f"{_UNPKG}/katex@{KATEX_VER}/dist/contrib/auto-render.min.js",
79
+ "katex/auto-render.min.js",
80
+ ),
81
+ (f"{_UNPKG}/reveal.js@{REVEAL_VER}/dist/reveal.js", "reveal.js/reveal.js"),
82
+ (f"{_UNPKG}/reveal.js@{REVEAL_VER}/dist/reveal.css", "reveal.js/reveal.css"),
83
+ (f"{_UNPKG}/reveal.js@{REVEAL_VER}/dist/reset.css", "reveal.js/reset.css"),
84
+ (f"{_UNPKG}/htmx.org@{HTMX_VER}/dist/htmx.min.js", "htmx.min.js"),
85
+ (f"{_UNPKG}/lucide@{LUCIDE_VER}/dist/umd/lucide.min.js", "lucide/lucide.min.js"),
86
+ ]
87
+ items.extend(
88
+ (f"{_UNPKG}/katex@{KATEX_VER}/dist/fonts/{f}", f"katex/fonts/{f}") for f in _KATEX_FONTS
89
+ )
90
+ items.extend(_font_assets("lato", LATO_VER, _LATO_FACES))
91
+ items.extend(_font_assets("merriweather", MERRIWEATHER_VER, _MERRIWEATHER_FACES))
92
+ return tuple(items)
93
+
94
+
95
+ def _font_assets(
96
+ family: str, version: str, faces: tuple[tuple[str, str], ...]
97
+ ) -> list[tuple[str, str]]:
98
+ """URLs for one ``@fontsource/<family>`` package, latin subset."""
99
+ out: list[tuple[str, str]] = []
100
+ for weight, style in faces:
101
+ filename = f"{family}-latin-{weight}-{style}.woff2"
102
+ url = f"{_JSDELIVR}/@fontsource/{family}@{version}/files/{filename}"
103
+ out.append((url, f"fonts/{family}/{filename}"))
104
+ return out
105
+
106
+
107
+ def _download(url: str, dest: Path) -> None:
108
+ if not url.startswith("https://"):
109
+ msg = f"Refusing to fetch non-https URL: {url}"
110
+ raise ValueError(msg)
111
+ dest.parent.mkdir(parents=True, exist_ok=True)
112
+ req = Request(url, headers={"User-Agent": "simplex-vendor/1.0"}) # noqa: S310
113
+ with urlopen(req, timeout=30) as resp: # noqa: S310
114
+ dest.write_bytes(resp.read())
115
+
116
+
117
+ def ensure(static_dir: Path) -> list[Path]:
118
+ """Download any missing vendored assets into `static_dir`.
119
+
120
+ Returns the list of files that were newly fetched (empty on a hot cache).
121
+ Network failures are reported as warnings rather than raised, so an
122
+ offline build still produces HTML (just without those assets).
123
+ """
124
+ for rel in _STALE_PATHS:
125
+ stale = static_dir / rel
126
+ if stale.exists():
127
+ stale.unlink()
128
+ fetched: list[Path] = []
129
+ failed: list[str] = []
130
+ for url, rel in _assets():
131
+ dest = static_dir / rel
132
+ if dest.exists():
133
+ continue
134
+ try:
135
+ _download(url, dest)
136
+ except (URLError, TimeoutError, OSError) as exc:
137
+ failed.append(f"{rel} ({exc})")
138
+ continue
139
+ fetched.append(dest)
140
+ if failed:
141
+ warnings.warn(
142
+ "simplex: could not vendor "
143
+ + str(len(failed))
144
+ + " asset(s); page styles/scripts may be missing: "
145
+ + "; ".join(failed),
146
+ stacklevel=2,
147
+ )
148
+ return fetched
@@ -0,0 +1,166 @@
1
+ Metadata-Version: 2.4
2
+ Name: simplex-web
3
+ Version: 0.2.0
4
+ Summary: Manim-slides presentation framework with a generated web portal.
5
+ Project-URL: Homepage, https://github.com/shlomi-perles/simplex
6
+ Project-URL: Issues, https://github.com/shlomi-perles/simplex/issues
7
+ Project-URL: Repository, https://github.com/shlomi-perles/simplex
8
+ Author: Shlomi Perles
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Keywords: animation,computer-science,education,lecture,manim,manim-slides,math,presentation,static-site
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: Education
15
+ Classifier: Intended Audience :: Science/Research
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3 :: Only
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Topic :: Education
22
+ Classifier: Topic :: Internet :: WWW/HTTP :: Site Management
23
+ Classifier: Topic :: Multimedia :: Graphics
24
+ Classifier: Topic :: Multimedia :: Video
25
+ Classifier: Topic :: Scientific/Engineering :: Visualization
26
+ Classifier: Typing :: Typed
27
+ Requires-Python: >=3.13
28
+ Requires-Dist: av>=15.0
29
+ Requires-Dist: jinja2>=3.1
30
+ Requires-Dist: manim-simplex>=0.2.0
31
+ Requires-Dist: manim-slides>=5.1.7
32
+ Requires-Dist: markdown-it-py>=3.0
33
+ Requires-Dist: mdit-py-plugins>=0.4
34
+ Requires-Dist: pillow>=11.0
35
+ Requires-Dist: platformdirs>=4.2
36
+ Requires-Dist: pydantic-settings>=2.3
37
+ Requires-Dist: pydantic>=2.7
38
+ Requires-Dist: pygments>=2.18
39
+ Requires-Dist: rich>=13.7
40
+ Requires-Dist: structlog>=24.1
41
+ Requires-Dist: tomli-w>=1.0
42
+ Requires-Dist: typer>=0.12
43
+ Requires-Dist: watchfiles>=0.24
44
+ Description-Content-Type: text/markdown
45
+
46
+ # Simplex
47
+
48
+ A Manim-slides presentation framework with a generated web portal.
49
+
50
+ Authors write **vanilla Manim** (`MathTex(...)`, `VGroup(...).arrange(RIGHT)`); Simplex configures defaults underneath via frozen theme tokens. A `simplex new` command scaffolds a new deck; `simplex build` renders every deck and produces a static portal for GitHub Pages.
51
+
52
+ ## The three repos
53
+
54
+ `simplex` is one of three packages that together make up the v0.2.0 toolkit:
55
+
56
+ | Repo | PyPI | Role |
57
+ |---|---|---|
58
+ | [`manim-simplex`](https://github.com/shlomi-perles/manim-simplex) | `manim-simplex` | The manim plugin: mobjects, theme, `BaseSlide`, the `manim.plugins` entry-point. |
59
+ | [`simplex`](https://github.com/shlomi-perles/simplex) | `simplex-web` | The platform: CLI, deck discovery, render orchestration, web builder. Depends on `manim-simplex`. |
60
+ | [`simplex-lectures-template`](https://github.com/shlomi-perles/simplex-lectures-template) | -- | GitHub Template. Pre-wired user lectures repo. |
61
+
62
+ The PyPI slot `simplex` was already taken by an unrelated project, and PyPI's
63
+ name-similarity guard rejects short variants, so this distribution publishes
64
+ as `simplex-web`. The *import* name is still
65
+ `simplex` -- both wheels ship `src/simplex/` **without** `__init__.py` and
66
+ Python's PEP 420 implicit namespace packages merge them at import time, so
67
+ `from simplex.engine import Remove` and `from simplex.cli.commands import app`
68
+ resolve regardless of which wheel ships the module.
69
+
70
+ ## Quick start
71
+
72
+ ```bash
73
+ # Install from PyPI:
74
+ pip install simplex-web
75
+
76
+ # Bootstrap a fresh checkout (Linux / macOS):
77
+ ./scripts/bootstrap.sh
78
+
79
+ # Or on Windows:
80
+ .\\scripts\\bootstrap.ps1
81
+
82
+ # Scaffold a new deck and render it:
83
+ uv run simplex new my-first-deck
84
+ uv run simplex render my-first-deck
85
+
86
+ # Generate the portal and preview it locally:
87
+ uv run simplex build
88
+ uv run simplex serve
89
+ ```
90
+
91
+ ## Repository layout
92
+
93
+ ```
94
+ simplex/
95
+ |-- src/simplex/ (no __init__.py -- PEP 420 namespace)
96
+ | |-- deck/ DeckConfig, discovery, scaffolder
97
+ | |-- render/ runner, reconcile, html/pdf/pptx, thumbnail
98
+ | |-- web/ markdown notes + Jinja portal + SSE reload
99
+ | `-- cli/ Typer entry point
100
+ |-- decks/ author content (one directory per deck)
101
+ `-- tests/
102
+
103
+ # Plugin half (mobjects, theme, slide bases) lives in manim-simplex.
104
+ ```
105
+
106
+ Every directory ships a short `README.md` (<=50 lines) covering *scope*, *public surface*, and *don'ts*. Only this root README is long-form.
107
+
108
+ ## Authoring a deck
109
+
110
+ A deck is three files plus optional assets:
111
+
112
+ ```
113
+ decks/my-deck/
114
+ |-- deck.toml slug, title, summary, tags, theme, scenes, quality
115
+ |-- slides.py vanilla Manim, subclassing simplex.slides.*
116
+ |-- notes.md English notes rendered into the portal
117
+ `-- assets/
118
+ ```
119
+
120
+ Inside `slides.py` you write plain Manim -- the framework's only contribution is the base class plus a pure `make_chrome` factory:
121
+
122
+ ```python
123
+ from manim import MathTex, ORIGIN, Write
124
+ from simplex.slides import BaseSlide, make_chrome
125
+ from simplex.theme.context import get_active_theme
126
+
127
+
128
+ class FermatLittleTheorem(BaseSlide):
129
+ def setup(self) -> None:
130
+ super().setup()
131
+ chrome = make_chrome(get_active_theme(), self.region, header="Fermat's little theorem")
132
+ self.add_to_canvas(**chrome.mobjects)
133
+ self.region = chrome.body_region
134
+
135
+ def construct(self) -> None:
136
+ eq = MathTex(r"a^{p-1} \equiv 1 \pmod p")
137
+ self.region.place(eq, ORIGIN)
138
+ self.play(Write(eq))
139
+ self.next_slide() # bare first call -> MAIN named "Fermat Little Theorem"
140
+ ```
141
+
142
+ No factories, no wrappers, no anti-corruption wall. The theme provides defaults, `self.region` provides bounded layout, and `clear_scene(exclude=...)` provides bulk fade-outs. Slide numbering / wall clock live in the RevealJS host (toggle via `[web]` in `deck.toml`), not the rendered frames.
143
+
144
+ ## Theme tokens
145
+
146
+ Presets are frozen `Theme` instances, not subclasses, so swapping the visual identity at runtime is one assignment:
147
+
148
+ ```python
149
+ from simplex.theme import active_theme, presets
150
+
151
+ with active_theme(presets.ACADEMIC_LIGHT):
152
+ # all slides constructed here pick up the light palette
153
+ ...
154
+ ```
155
+
156
+ LaTeX preamble lives on `theme.latex.preamble`. Fixed-width prose blocks use the `TexPage` mobject (default 20 cm, override via `width_cm=…` kwarg or a class attribute on a subclass).
157
+
158
+ ## Style + tooling
159
+
160
+ - Python **3.13+**, env + lockfile via **uv**, lint + format via **ruff**, types via **basedpyright --strict**.
161
+ - Configuration through frozen **Pydantic v2** models. No bare `dict[str, Any]`.
162
+ - See `STYLE.md` for the full rule set.
163
+
164
+ ## License
165
+
166
+ MIT.
@@ -0,0 +1,91 @@
1
+ simplex/README.md,sha256=9qqxuZBpUBEwfmLJL4adgYXi2fKpQDbj_yOuzvVScng,1788
2
+ simplex/cli/README.md,sha256=ZJjhq9mJ-9QEevMVG7Pxgz5wwQfAGsOCsiabPsvl8VQ,444
3
+ simplex/cli/__init__.py,sha256=ioPkL1yuWFoB5MhWDWpUXttwBNyvk21jOhk8BAO4Dn0,80
4
+ simplex/cli/commands.py,sha256=HN8zrUmrhru1BAhDInKFCQ6AEuo4qhiqNB73dsUidcw,12437
5
+ simplex/deck/README.md,sha256=Z_1sAfbJflRTLWexIqLs3Sd7eoYCqd4NqgPpEF7Jemo,707
6
+ simplex/deck/__init__.py,sha256=T0d5kSGXQKdn6MrIQ_lI9vqlF1m5ywkClPrxSHVwJhc,233
7
+ simplex/deck/config.py,sha256=PT2E57Yh-P9wtXOqijmV1k14U41RrTOC6Dropx8a2Kg,7932
8
+ simplex/deck/registry.py,sha256=8_d359WkbmDRwLaBVSmK-Wh_6AvuS09iFcikVC3il5c,3438
9
+ simplex/deck/scaffold.py,sha256=jXKR4psORNfcuvNGvDAsp6adjjhZqXlIXqfezA0NXbs,2969
10
+ simplex/deck/section.py,sha256=0x_cD1Krj9XT1e3hHKdhVw55CMkN1QHw22zcNvThuwI,1249
11
+ simplex/deck/_template/deck.toml,sha256=3p4ZTIgMygOesVbdUSBRIsOUzC3GdOwQlRHa5bkjtJk,260
12
+ simplex/deck/_template/manim.cfg,sha256=wcXdS0WGV8Pdg8aHAEIMlsWgY2bcHgos6Eqvcjd_JHU,45
13
+ simplex/deck/_template/notes.md,sha256=NAgNIL03njgi0ylPZxLRFfnW7WxWJS563VH0kZFWCzk,1114
14
+ simplex/deck/_template/refs.bib,sha256=_BWw8KuQ4vH61xZluEqmHf5nPvMJaS3Ep-BHr9woKGI,519
15
+ simplex/deck/_template/assets/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
+ simplex/deck/_template/assets/code/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
+ simplex/deck/_template/assets/figures/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
+ simplex/deck/_template/slides/__init__.py,sha256=e97vgVjwsOalM_WAPUaE39uFbS07H80ETRPrYvHoFyY,313
19
+ simplex/deck/_template/slides/intro.py,sha256=xCoAGPoD2dKrUtCgxzGO5ljAoQY3cAcfW1iisTOCQwI,674
20
+ simplex/engine/README.md,sha256=97uA3fU8IaRwhf7JyxNNMks-6GslmG5mfzX8om4JZGI,229
21
+ simplex/render/README.md,sha256=iO1SPihzwaJtWmzHFej9uxCnMu7Y0Fm4zmvDNplDHRs,2001
22
+ simplex/render/__init__.py,sha256=1ATzXObdwi86reDt6lxtZxZV6PCPhDuSOGZljwMEGKI,83
23
+ simplex/render/html.py,sha256=v48dSR2RKIxzYHZwEEDkIJ8by86HRcuLY2f1B56vlcY,4303
24
+ simplex/render/pdf.py,sha256=WQpTC1qQ8XEu4sROHpmsl9AfyE6aZC0x5M0Mop44A4E,1138
25
+ simplex/render/pptx.py,sha256=tNDvgmyMiWltuiXxvQ7honQR8EiAmXABwVSEZ05fIao,1129
26
+ simplex/render/reconcile.py,sha256=rwIQAF4jcgSJBNLme9166bK2H9JgYtgWl8rYycWtzRA,13313
27
+ simplex/render/runner.py,sha256=rb3LB2zYlpqLufgGizXCR5_te24b4PQbzZnYYEhQBFY,4274
28
+ simplex/render/thumbnail.py,sha256=Hu0EzcQygjOSbVNBIRRI0WW8ZzjHyFj8kT3GSnhvxHU,13010
29
+ simplex/slides/README.md,sha256=dW1HYTGgT0phWeB40KfnO6XDgiAsFBMw82-7dYMo4Eg,211
30
+ simplex/slides/components/README.md,sha256=rDRrSJ0g456MK25cGbFVbPiELZ9ZuX_TXgQbrIfwFkw,192
31
+ simplex/theme/README.md,sha256=jPFIEUxYjs1xDhPqe3yAObybIupnxFGKAzQ_WRyJcXs,192
32
+ simplex/web/README.md,sha256=tU0TrRtQysJ77LgcgGyd3lpPjk94EEK7KvcJQYeauyw,1683
33
+ simplex/web/__init__.py,sha256=LFAopywmtZApg3zWNKsNlSlEpLH6ej9_Id8gNyXY0ho,58
34
+ simplex/web/bibliography.py,sha256=ik-s1K9RdEa-yqI2-LcurNaSlB8uTE53u8UuFTx5fAQ,8233
35
+ simplex/web/bibtex.py,sha256=kI_ZAkRFCIuItWKC-kCgXdtvlJQ1cbTcQ8zyVnexrVo,4366
36
+ simplex/web/builder.py,sha256=5sT0k5_PYpsQgZW8iS_SJtS8N5skq3XaPAYkOjIit-s,10178
37
+ simplex/web/callouts.py,sha256=rgL-jAQjnIEEg8WnpCOiQPEqgTIpo_3Ol55imwbPLPs,4956
38
+ simplex/web/citations.py,sha256=4aONO0KwR5wF1YoztCFW5QOOMCQjoBDslWlFd172nWw,3866
39
+ simplex/web/equations.py,sha256=NVEcePtEgUizpr8bHOO1qlOB6kSAUEYe48Ia7heevIg,2801
40
+ simplex/web/notes.py,sha256=5hDtICeQ2StUbU8ObXrW04bWALjdbJJk57FjzwJ59uQ,5116
41
+ simplex/web/refs.py,sha256=9PGmTc_jBCrR9NQtjcIg0kTLvqtV0LEZ3BjFd3WMBLw,1884
42
+ simplex/web/sidenotes.py,sha256=l2HAODmWRaRudu9CdlhGWkGniiJKnhLuCNeaclJDGC0,2885
43
+ simplex/web/site_config.py,sha256=QFdrgsGc63sdD8kEcVRL93HOIh3JNtN56ZWofLu9ghk,2454
44
+ simplex/web/slide_ref.py,sha256=GIIKzZhkK0FcZtYyfHK4-gqDmyZFPaW3reWEoOp43DM,2138
45
+ simplex/web/vendor.py,sha256=EY8A36wLKzYomt5mJupLQ4a7qyPfx87A6WjzCY80kWA,5235
46
+ simplex/web/static/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
+ simplex/web/static/README.md,sha256=nwaz8KPMmA953XwCWLzExySCeKP3JePbu12F3GjqQ14,897
48
+ simplex/web/static/htmx.min.js,sha256=RJMXreeIHpSVENthSZHhlcOgmcTHkcJNrOxV-fSipFI,48101
49
+ simplex/web/static/notes.js,sha256=8-atdVEjFHlpotD3KgNC1vcCXDXu4o26bxiuL_ng2xc,2393
50
+ simplex/web/static/simplex.css,sha256=gjTkLOTYPzAaj_bayNQH_SJyI_isxB-txDz5qPbOIEw,47161
51
+ simplex/web/static/tailwind.js,sha256=gvEZAJvhPw8-XgKJO4SMJI4YTLhMhecodO80z-_IvFc,410933
52
+ simplex/web/static/viewer.js,sha256=FWxoeBh1bYcuU8eJLo9GZ7uJkzoy01MC0KRyro1U16I,15445
53
+ simplex/web/static/fonts/lato/lato-latin-400-italic.woff2,sha256=vKHYitpUTZyAhy1NonEz-rbTRzYfom6TK0fslVkIj9A,24408
54
+ simplex/web/static/fonts/lato/lato-latin-400-normal.woff2,sha256=kYt9w-Li0BXBbOCLV7y2TSJTuvwXB2WPNh5yhlSY5Tc,23580
55
+ simplex/web/static/fonts/lato/lato-latin-700-italic.woff2,sha256=bIQ0gpbr4uKggww5YusCFWQZ2bx2Nxwura9zKdgn1VA,24448
56
+ simplex/web/static/fonts/lato/lato-latin-700-normal.woff2,sha256=xEfddne0Gdt7Idvfxid8eBapE__adv0uUnAt9TjeDkk,23040
57
+ simplex/web/static/fonts/lato/lato-latin-900-normal.woff2,sha256=CGZIWbqrXtmPC_gY7XfjhGT_GCbcZAbV7L1lFAmvvZI,22504
58
+ simplex/web/static/fonts/merriweather/merriweather-latin-400-italic.woff2,sha256=SZ7FTrKv0QPsN1BeI8ZXD8fYmg1yjd4Z2HoJLkoyYbQ,19780
59
+ simplex/web/static/fonts/merriweather/merriweather-latin-400-normal.woff2,sha256=XC1mLpK8vxpZcLlwQPkBAxKV55qWMU24MC9UkAMCIIc,20028
60
+ simplex/web/static/fonts/merriweather/merriweather-latin-700-italic.woff2,sha256=NkLfEvDZMNWEapZlIICQjrLzg7YCqVz4DR5iJ-ZuHEY,19900
61
+ simplex/web/static/fonts/merriweather/merriweather-latin-700-normal.woff2,sha256=JzyGE83ShS3VMY8iTYBK5tL8cXxI0_HatYe205b7T8g,19740
62
+ simplex/web/static/fonts/merriweather/merriweather-latin-900-normal.woff2,sha256=9rnuuwVGGEB5D8gEtFkDI-8SpX_lr3_N7tLXmOVyhEs,19816
63
+ simplex/web/static/katex/auto-render.min.js,sha256=e1fUJ6xicGd9r42DgN7SzHMzb5FJoWe44f4NbvZmBK4,3481
64
+ simplex/web/static/katex/katex.min.css,sha256=cXvJrnhTth8PdkVd3fDs1PUnp4P0LeKsJGhImcHEYlg,23335
65
+ simplex/web/static/katex/katex.min.js,sha256=5r_l3uvUx8zScgVbq2O9OrLHO5B7bmoi01J0CoE4H9Q,275414
66
+ simplex/web/static/katex/fonts/KaTeX_AMS-Regular.woff2,sha256=DN04fJWQoan5eUVgAi27WWVKfYbxh6oMgUla1C06cwg,28076
67
+ simplex/web/static/katex/fonts/KaTeX_Main-Bold.woff2,sha256=D2DRuJeTjskYyM4HMJJBG6-UOPZzlGVpP_GLD50gsCE,25324
68
+ simplex/web/static/katex/fonts/KaTeX_Main-Regular.woff2,sha256=wjQs2Lhp4BdSqTIdwXIT_EDU0Ex5aIwdQ_LPMWq9eGY,26272
69
+ simplex/web/static/katex/fonts/KaTeX_Math-BoldItalic.woff2,sha256=3Ec0TbtstbZVyEYNVh9N9fUBuQyAStPGzsZf4yI1GrE,16400
70
+ simplex/web/static/katex/fonts/KaTeX_Math-Italic.woff2,sha256=evWMXsjxMqLd3pAnxteBTezOTTuCKhEZKkKiDi6XMmQ,16440
71
+ simplex/web/static/katex/fonts/KaTeX_Size1-Regular.woff2,sha256=a0fEAWa22-IaXfyncYQT8hR_0jmb4bpgXYrTnO3yXf4,5468
72
+ simplex/web/static/katex/fonts/KaTeX_Size2-Regular.woff2,sha256=0ExUIZ-ersbU1P1C37KHhZdaR5TWsvxx5Wa5zW24Qt0,5208
73
+ simplex/web/static/katex/fonts/KaTeX_Size3-Regular.woff2,sha256=c9WRJxsWBJYMsQu5D-4CFnCvcpcBfg6YSAszLRH1GZU,3624
74
+ simplex/web/static/katex/fonts/KaTeX_Size4-Regular.woff2,sha256=pK99QURAocF5CCXPtwDPnPQ7DyxLBPDrxSMBGtmFPsA,4928
75
+ simplex/web/static/lucide/README.md,sha256=IeB9RHYzCDV9OxvbwjVhf0znL5nOHVENiekuA43NA50,152
76
+ simplex/web/static/lucide/lucide.min.js,sha256=GHp1ZiXFznSZwgfRsNHPThq5Xj9mbH4M0Pr8PmhC0EA,401894
77
+ simplex/web/static/reveal.js/reset.css,sha256=GqjoTJyry_5NlbGYef5IucLF5tVFdMvmebwi7bn-ErY,871
78
+ simplex/web/static/reveal.js/reveal.css,sha256=nLxQgnl9k48O54Ayh5ChMa49e8XAnBdud5J8F08p5go,52279
79
+ simplex/web/static/reveal.js/reveal.js,sha256=lza_PYkY45HowHyFxTdzgA1ABNwl-UiRbjGco3HKiBo,107670
80
+ simplex/web/templates/README.md,sha256=VtnMzW9M5qZxQKZcjMgTl1A8TRWYpFS1dVm8XsXVwi8,673
81
+ simplex/web/templates/_carousel.html,sha256=dgdyON6G9akHJqD4rrq2uZR_O3TcLPh6eHgiDa5cKaA,3970
82
+ simplex/web/templates/base.html,sha256=R0Un3roGTtr4NTefRgk-1Ks7V4_Eitclk1pgECIsYCE,4458
83
+ simplex/web/templates/deck.html,sha256=WfGbT_BMfQHBjdn2mt3RUA6ejM5ScLLM1qFCz_eVSqw,5747
84
+ simplex/web/templates/index.html,sha256=Zc0WqWmZdCyesXgHWm6OQsIKq5ncNlXT0K88zrR-6rg,574
85
+ simplex/web/templates/revealjs.html.j2,sha256=bxAWa5JZ8v4Sv5EuCCbElRp3F0Zk7LpLN2kmICobj_I,13715
86
+ simplex/web/templates/section.html,sha256=VXJ_FpQeoRDCNQy-nidt3qllJyIDpZWOBRnjm-vWaEM,2379
87
+ simplex_web-0.2.0.dist-info/METADATA,sha256=G2Cwanu7EDu4UJdrK9PLtYff1EPqadyQVXky4Y245AA,6386
88
+ simplex_web-0.2.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
89
+ simplex_web-0.2.0.dist-info/entry_points.txt,sha256=ooR5SK2_ligzPYs0z_bNDQ9Z1EufjlX5jIlDYybepSI,53
90
+ simplex_web-0.2.0.dist-info/licenses/LICENSE,sha256=nl59bQ87NqHIcm_46xQjWvu0Nv630wsBOK4I1-ou9SY,1070
91
+ simplex_web-0.2.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.29.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ simplex = simplex.cli.commands:app
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Shlomi Perles
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.