From 4fba51fec092d6c933806829e11aa29ccd1438d7 Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Tue, 26 May 2026 00:48:29 -0400 Subject: [PATCH 1/9] Add line_height parameter to render_frame --- great_docs/_term_player/renderer.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/great_docs/_term_player/renderer.py b/great_docs/_term_player/renderer.py index 3f0d519d..eb9431c4 100644 --- a/great_docs/_term_player/renderer.py +++ b/great_docs/_term_player/renderer.py @@ -21,6 +21,7 @@ def render_frame( *, font_family: str = DEFAULT_FONT_FAMILY, font_size: int = DEFAULT_FONT_SIZE, + line_height: float = DEFAULT_LINE_HEIGHT, show_cursor: bool = True, window_chrome: str = "none", ) -> str: @@ -36,6 +37,9 @@ def render_frame( CSS font-family for terminal text. font_size Font size in pixels. + line_height + Line height multiplier. Lower values (e.g. 1.2) make box-drawing + characters connect vertically. show_cursor Whether to render the cursor block. window_chrome @@ -50,7 +54,7 @@ def render_frame( theme = Theme() cell_w = font_size * 0.6 # Monospace character width approximation - cell_h = font_size * DEFAULT_LINE_HEIGHT + cell_h = font_size * line_height pad = DEFAULT_PADDING chrome_h = 0.0 # Chrome is rendered as CSS overlay, not in SVG From 1ecccfd9f22fc1ec8c3aa15a69127cb02b7710c1 Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Tue, 26 May 2026 00:48:56 -0400 Subject: [PATCH 2/9] Add line_height to Script model and parser --- great_docs/_term_player/script.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/great_docs/_term_player/script.py b/great_docs/_term_player/script.py index 6b62b98a..8ce0be95 100644 --- a/great_docs/_term_player/script.py +++ b/great_docs/_term_player/script.py @@ -83,6 +83,7 @@ class Script: theme_name: str | None = None theme: Theme | None = None font_family: str | None = None + line_height: float | None = None show_cursor: bool = True window_chrome: str = "none" prompt: str | None = None @@ -131,6 +132,7 @@ def _parse_script_data(data: dict[str, Any]) -> Script: script.speed = settings.get("speed", 1.0) script.theme_name = settings.get("theme") script.font_family = settings.get("font_family") + script.line_height = settings.get("line_height") script.show_cursor = settings.get("show_cursor", True) script.window_chrome = settings.get("window_chrome", "none") if "prompt" in settings: From 882440335801711b0f12e2ae0f81f45a4cb7eaa8 Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Tue, 26 May 2026 00:49:27 -0400 Subject: [PATCH 3/9] Add optional line_height to term player manifest --- great_docs/_term_player/manifest.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/great_docs/_term_player/manifest.py b/great_docs/_term_player/manifest.py index 0b56b1fa..8260a6c6 100644 --- a/great_docs/_term_player/manifest.py +++ b/great_docs/_term_player/manifest.py @@ -153,6 +153,7 @@ def generate_manifest( # Determine render settings from script theme = recording.term.theme font_family = "JetBrains Mono, Fira Code, SF Mono, Menlo, Consolas, monospace" + line_height: float | None = None show_cursor = True window_chrome = "none" @@ -161,6 +162,8 @@ def generate_manifest( theme = script.theme if script.font_family: font_family = script.font_family + if script.line_height is not None: + line_height = script.line_height show_cursor = script.show_cursor window_chrome = script.window_chrome @@ -248,6 +251,7 @@ def generate_manifest( font_family=font_family, show_cursor=show_cursor, window_chrome=window_chrome, + **({"line_height": line_height} if line_height is not None else {}), ) if out_path: From 20dd1d11088d3cd9799859bbc429f8f72012d074 Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Tue, 26 May 2026 00:51:36 -0400 Subject: [PATCH 4/9] Add landing demo terminal recording --- assets/landing-demo.termshow | 142 +++++++++++++++++++++++++++++++ assets/landing-demo.termshow.yml | 28 ++++++ 2 files changed, 170 insertions(+) create mode 100644 assets/landing-demo.termshow create mode 100644 assets/landing-demo.termshow.yml diff --git a/assets/landing-demo.termshow b/assets/landing-demo.termshow new file mode 100644 index 00000000..25b326df --- /dev/null +++ b/assets/landing-demo.termshow @@ -0,0 +1,142 @@ +{"version": 1, "format": "termshow", "term": {"cols": 80, "rows": 24, "type": "xterm-256color"}, "title": "Great Docs — Init, Build, Preview"} +[1.0, "o", "\u001b[32m\u001b[1m$\u001b[0m "] +[0.4, "o", "c"] +[0.08, "o", "d"] +[0.12, "o", " "] +[0.1, "o", "w"] +[0.08, "o", "e"] +[0.06, "o", "a"] +[0.09, "o", "t"] +[0.07, "o", "h"] +[0.08, "o", "e"] +[0.06, "o", "r"] +[0.1, "o", "v"] +[0.07, "o", "a"] +[0.09, "o", "u"] +[0.06, "o", "l"] +[0.08, "o", "t"] +[0.3, "o", "\r\n"] +[0.3, "o", "\u001b[32m\u001b[1m$\u001b[0m "] +[0.6, "o", "g"] +[0.09, "o", "r"] +[0.07, "o", "e"] +[0.11, "o", "a"] +[0.06, "o", "t"] +[0.08, "o", "-"] +[0.1, "o", "d"] +[0.07, "o", "o"] +[0.09, "o", "c"] +[0.06, "o", "s"] +[0.12, "o", " "] +[0.09, "o", "i"] +[0.07, "o", "n"] +[0.06, "o", "i"] +[0.08, "o", "t"] +[0.35, "o", "\r\n"] +[0.6, "o", "Initializing great-docs...\r\n"] +[0.4, "o", "Found package __init__.py at: weathervault/__init__.py\r\n"] +[0.8, "o", "Discovered 24 public names\r\n"] +[0.3, "o", "Detected docstring style: numpy\r\n"] +[0.2, "o", "Found Click CLI: weathervault in weathervault.cli\r\n"] +[0.5, "o", "\r\n\u001b[32m✅ Great Docs initialization complete!\u001b[0m\r\n"] +[0.1, "o", "\r\nNext steps:\r\n"] +[0.05, "o", "1. Review great-docs.yml to customize your API reference structure\r\n"] +[0.05, "o", "2. Run `great-docs build` to generate and build your documentation site\r\n"] +[0.05, "o", "3. Run `great-docs preview` to view the site locally\r\n"] +[0.0, "m", "init done"] +[1.8, "o", "\r\n\u001b[32m\u001b[1m$\u001b[0m "] +[0.5, "o", "g"] +[0.09, "o", "r"] +[0.07, "o", "e"] +[0.11, "o", "a"] +[0.06, "o", "t"] +[0.08, "o", "-"] +[0.1, "o", "d"] +[0.07, "o", "o"] +[0.09, "o", "c"] +[0.06, "o", "s"] +[0.12, "o", " "] +[0.08, "o", "b"] +[0.07, "o", "u"] +[0.09, "o", "i"] +[0.06, "o", "l"] +[0.08, "o", "d"] +[0.35, "o", "\r\n"] +[0.5, "o", "\u001b[38;2;49;139;252m┌────────────────────────────────────────────────────────────────────────────┐\u001b[0m\r\n"] +[0.05, "o", "\u001b[38;2;49;139;252m│\u001b[0m great-docs build · weathervault v2.4.1 \u001b[38;2;49;139;252m│\u001b[0m\r\n"] +[0.05, "o", "\u001b[38;2;49;139;252m│\u001b[0m 18 steps · estimated ~1 min \u001b[38;2;49;139;252m│\u001b[0m\r\n"] +[0.05, "o", "\u001b[38;2;49;139;252m└────────────────────────────────────────────────────────────────────────────┘\u001b[0m\r\n"] +[0.3, "o", "\r\n\u001b[1;38;2;49;139;252m━━\u001b[1;37m Step 1/18 \u001b[1;38;2;49;139;252m─ \u001b[1;37mPrepare build directory\u001b[0m ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n"] +[0.4, "o", " \u001b[32m✔\u001b[0m great-docs/ ready \u001b[2m0.3s\u001b[0m\r\n"] +[0.2, "o", "\r\n\u001b[1;38;2;49;139;252m━━\u001b[1;37m Step 2/18 \u001b[1;38;2;49;139;252m─ \u001b[1;37mConfigure API reference\u001b[0m ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n"] +[0.8, "o", " \u001b[32m✔\u001b[0m 24 exports in 4 sections \u001b[2m0.8s\u001b[0m\r\n"] +[0.15, "o", "\r\n\u001b[1;38;2;49;139;252m━━\u001b[1;37m Step 3/18 \u001b[1;38;2;49;139;252m─ \u001b[1;37mGenerate llms.txt / llms-full.txt\u001b[0m ━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n"] +[0.5, "o", " \u001b[32m✔\u001b[0m 2 files (4.2 KB) \u001b[2m0.4s\u001b[0m\r\n"] +[0.15, "o", "\r\n\u001b[1;38;2;49;139;252m━━\u001b[1;37m Step 4/18 \u001b[1;38;2;49;139;252m─ \u001b[1;37mGenerate SKILL.md\u001b[0m ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n"] +[0.4, "o", " \u001b[32m✔\u001b[0m SKILL.md written \u001b[2m0.3s\u001b[0m\r\n"] +[0.15, "o", "\r\n\u001b[1;38;2;49;139;252m━━\u001b[1;37m Step 5/18 \u001b[1;38;2;49;139;252m─ \u001b[1;37mGenerate source links\u001b[0m ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n"] +[0.6, "o", " \u001b[32m✔\u001b[0m 24 source links resolved \u001b[2m0.5s\u001b[0m\r\n"] +[0.15, "o", "\r\n\u001b[1;38;2;49;139;252m━━\u001b[1;37m Step 6/18 \u001b[1;38;2;49;139;252m─ \u001b[1;37mGenerate changelog\u001b[0m ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n"] +[0.5, "o", " \u001b[32m✔\u001b[0m 8 releases from GitHub \u001b[2m0.6s\u001b[0m\r\n"] +[0.15, "o", "\r\n\u001b[1;38;2;49;139;252m━━\u001b[1;37m Step 7/18 \u001b[1;38;2;49;139;252m─ \u001b[1;37mGenerate CLI reference\u001b[0m ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n"] +[0.4, "o", " \u001b[32m✔\u001b[0m 6 commands documented \u001b[2m0.3s\u001b[0m\r\n"] +[0.15, "o", "\r\n\u001b[1;38;2;49;139;252m━━\u001b[1;37m Step 8/18 \u001b[1;38;2;49;139;252m─ \u001b[1;37mProcess User Guide\u001b[0m ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n"] +[0.3, "o", " \u001b[32m✔\u001b[0m 5 pages configured \u001b[2m0.2s\u001b[0m\r\n"] +[0.15, "o", "\r\n\u001b[1;38;2;49;139;252m━━\u001b[1;37m Step 9/18 \u001b[1;38;2;49;139;252m─ \u001b[1;37mProcess custom sections\u001b[0m ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n"] +[0.2, "o", " \u001b[2m⊘\u001b[0m \u001b[2mSkipped (none configured)\u001b[0m\r\n"] +[0.15, "o", "\r\n\u001b[1;38;2;49;139;252m━━\u001b[1;37m Step 10/18 \u001b[1;38;2;49;139;252m─ \u001b[1;37mProcess custom pages\u001b[0m ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n"] +[0.2, "o", " \u001b[2m⊘\u001b[0m \u001b[2mSkipped (none configured)\u001b[0m\r\n"] +[0.15, "o", "\r\n\u001b[1;38;2;49;139;252m━━\u001b[1;37m Step 11/18 \u001b[1;38;2;49;139;252m─ \u001b[1;37mProcess page tags\u001b[0m ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n"] +[0.2, "o", " \u001b[2m⊘\u001b[0m \u001b[2mSkipped (none configured)\u001b[0m\r\n"] +[0.15, "o", "\r\n\u001b[1;38;2;49;139;252m━━\u001b[1;37m Step 12/18 \u001b[1;38;2;49;139;252m─ \u001b[1;37mProcess page status badges\u001b[0m ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n"] +[0.2, "o", " \u001b[2m⊘\u001b[0m \u001b[2mSkipped (none configured)\u001b[0m\r\n"] +[0.15, "o", "\r\n\u001b[1;38;2;49;139;252m━━\u001b[1;37m Step 13/18 \u001b[1;38;2;49;139;252m─ \u001b[1;37mCopy assets\u001b[0m ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n"] +[0.3, "o", " \u001b[32m✔\u001b[0m 42 files copied \u001b[2m0.2s\u001b[0m\r\n"] +[0.15, "o", "\r\n\u001b[1;38;2;49;139;252m━━\u001b[1;37m Step 14/18 \u001b[1;38;2;49;139;252m─ \u001b[1;37mGenerate API reference\u001b[0m ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n"] +[1.2, "o", " \u001b[32m✔\u001b[0m 24 .qmd pages generated \u001b[2m1.1s\u001b[0m\r\n"] +[0.15, "o", "\r\n\u001b[1;38;2;49;139;252m━━\u001b[1;37m Step 15/18 \u001b[1;38;2;49;139;252m─ \u001b[1;37mBuild site with Quarto\u001b[0m ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n"] +[0.6, "o", " \u001b[38;2;49;139;252m►\u001b[0m Rendering pages \u001b[38;2;49;139;252m████████████████████████\u001b[2m\u001b[0m 47/47 100%"] +[2.5, "o", "\r \r"] +[0.1, "o", " \u001b[32m✔\u001b[0m Site rendered \u001b[2m8.2s\u001b[0m\r\n"] +[0.15, "o", "\r\n\u001b[1;38;2;49;139;252m━━\u001b[1;37m Step 16/18 \u001b[1;38;2;49;139;252m─ \u001b[1;37mPost-render processing\u001b[0m ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n"] +[0.1, "o", " \u001b[2m├─\u001b[0m \u001b[32m✔\u001b[0m Dark-mode toggle injected\r\n"] +[0.1, "o", " \u001b[2m├─\u001b[0m \u001b[32m✔\u001b[0m Interlinks resolved\r\n"] +[0.1, "o", " \u001b[2m├─\u001b[0m \u001b[32m✔\u001b[0m Responsive tables applied\r\n"] +[0.1, "o", " \u001b[2m├─\u001b[0m \u001b[32m✔\u001b[0m Copy-code buttons added\r\n"] +[0.1, "o", " \u001b[2m└─\u001b[0m \u001b[32m✔\u001b[0m Navbar widgets rendered\r\n"] +[0.3, "o", " \u001b[32m✔\u001b[0m 5 transforms applied \u001b[2m1.4s\u001b[0m\r\n"] +[0.15, "o", "\r\n\u001b[1;38;2;49;139;252m━━\u001b[1;37m Step 17/18 \u001b[1;38;2;49;139;252m─ \u001b[1;37mGenerate SEO files\u001b[0m ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n"] +[0.3, "o", " \u001b[32m✔\u001b[0m sitemap.xml + robots.txt \u001b[2m0.2s\u001b[0m\r\n"] +[0.15, "o", "\r\n\u001b[1;38;2;49;139;252m━━\u001b[1;37m Step 18/18 \u001b[1;38;2;49;139;252m─ \u001b[1;37mPrepare freeze cache\u001b[0m ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n"] +[0.2, "o", " \u001b[2m⊘\u001b[0m \u001b[2mSkipped (no code cells)\u001b[0m\r\n"] +[0.4, "o", "\r\n\u001b[38;2;49;139;252m┌────────────────────────────────────────────────────────────────────────────┐\u001b[0m\r\n"] +[0.05, "o", "\u001b[38;2;49;139;252m│\u001b[0m ✔ Build complete — 14/18 steps (4 skipped) \u001b[38;2;49;139;252m│\u001b[0m\r\n"] +[0.05, "o", "\u001b[38;2;49;139;252m│\u001b[0m Total time: 14.8s \u001b[38;2;49;139;252m│\u001b[0m\r\n"] +[0.05, "o", "\u001b[38;2;49;139;252m│\u001b[0m \u001b[38;2;49;139;252m│\u001b[0m\r\n"] +[0.05, "o", "\u001b[38;2;49;139;252m│\u001b[0m 🎉 Site ready → great-docs/_site/index.html \u001b[38;2;49;139;252m│\u001b[0m\r\n"] +[0.05, "o", "\u001b[38;2;49;139;252m└────────────────────────────────────────────────────────────────────────────┘\u001b[0m\r\n"] +[0.0, "m", "build done"] +[1.8, "o", "\r\n\u001b[32m\u001b[1m$\u001b[0m "] +[0.5, "o", "g"] +[0.09, "o", "r"] +[0.07, "o", "e"] +[0.11, "o", "a"] +[0.06, "o", "t"] +[0.08, "o", "-"] +[0.1, "o", "d"] +[0.07, "o", "o"] +[0.09, "o", "c"] +[0.06, "o", "s"] +[0.12, "o", " "] +[0.08, "o", "p"] +[0.07, "o", "r"] +[0.09, "o", "e"] +[0.06, "o", "v"] +[0.08, "o", "i"] +[0.07, "o", "e"] +[0.09, "o", "w"] +[0.35, "o", "\r\n"] +[0.8, "o", "\r\n\u001b[32m🌐 Serving site at \u001b[1mhttp://localhost:3000\u001b[0m\r\n"] +[0.3, "o", "\u001b[2m Press Ctrl+C to stop\u001b[0m\r\n"] +[4.0, "o", ""] +[0.0, "m", "preview done"] diff --git a/assets/landing-demo.termshow.yml b/assets/landing-demo.termshow.yml new file mode 100644 index 00000000..ab8c50dd --- /dev/null +++ b/assets/landing-demo.termshow.yml @@ -0,0 +1,28 @@ +source: assets/landing-demo.termshow + +settings: + idle_time_limit: 2 + window_chrome: colorful + +chapters: + - at: 0 + label: "Initialize" + - at: 11.5 + label: "Build" + - at: 29.23 + label: "Preview" + +snippets: + - at: 1.4 + duration: 9 + text: "great-docs init" + label: "Init" + - at: 12.5 + duration: 15.1 + text: "great-docs build" + label: "Build" + - at: 29.59 + duration: 6.62 + text: "great-docs preview" + label: "Preview" + From 0fe47ef36c7a2259117b994321275c8f2061881e Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Tue, 26 May 2026 00:52:09 -0400 Subject: [PATCH 5/9] Add JetBrainsMono font subsets --- .../assets/JetBrainsMono-Bold.subset.woff2 | Bin 0 -> 25484 bytes .../assets/JetBrainsMono-Regular.subset.woff2 | Bin 0 -> 24736 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 great_docs/assets/JetBrainsMono-Bold.subset.woff2 create mode 100644 great_docs/assets/JetBrainsMono-Regular.subset.woff2 diff --git a/great_docs/assets/JetBrainsMono-Bold.subset.woff2 b/great_docs/assets/JetBrainsMono-Bold.subset.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..aa9ad55a80b7042fbb9db31284357eaa413c41f1 GIT binary patch literal 25484 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 T?7VX{Iz)T%-jxRx5C8xG(-?HQ literal 0 HcmV?d00001 diff --git a/great_docs/assets/JetBrainsMono-Regular.subset.woff2 b/great_docs/assets/JetBrainsMono-Regular.subset.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..901b8bbefad322fa7d71b79dc2650da131c89024 GIT binary patch literal 24736 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 literal 0 HcmV?d00001 From 8e86e6974699896b82e5591f742c97c5a845fb29 Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Tue, 26 May 2026 00:52:31 -0400 Subject: [PATCH 6/9] Copy JetBrains Mono font subsets --- great_docs/core.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/great_docs/core.py b/great_docs/core.py index da75606d..1c094911 100644 --- a/great_docs/core.py +++ b/great_docs/core.py @@ -269,6 +269,15 @@ def _prepare_build_directory(self) -> None: if tp_css_src.exists(): shutil.copy2(tp_css_src, self.project_path / "termshow.css") + # Copy termshow font subsets (JetBrains Mono for box-drawing fidelity) + for font_file in ( + "JetBrainsMono-Regular.subset.woff2", + "JetBrainsMono-Bold.subset.woff2", + ): + font_src = self.assets_path / font_file + if font_src.exists(): + shutil.copy2(font_src, self.project_path / font_file) + # Copy the evolution demo data file demo_json_src = self.assets_path / "api-evolution-demo.json" if demo_json_src.exists(): From 03efa66c0e0bd5307622412d6504273f82ad1258 Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Tue, 26 May 2026 00:52:52 -0400 Subject: [PATCH 7/9] Embed JetBrains Mono subsets in termshow.css --- great_docs/assets/termshow.css | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/great_docs/assets/termshow.css b/great_docs/assets/termshow.css index 6689e714..eb0a975d 100644 --- a/great_docs/assets/termshow.css +++ b/great_docs/assets/termshow.css @@ -1,5 +1,28 @@ /* Great Docs Termshow Player Styles */ +/* Embedded JetBrains Mono subset (OFL license) — includes box-drawing chars */ +@font-face { + font-family: "JetBrains Mono"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(JetBrainsMono-Regular.subset.woff2) format("woff2"); + unicode-range: U+0020-007E, U+00A0-00FF, U+2010-2027, U+2190-219F, + U+2500-257F, U+2580-259F, U+25A0-25C0, U+2298, U+2605-2606, + U+2705, U+2714, U+2716, U+2718, U+26A0; +} + +@font-face { + font-family: "JetBrains Mono"; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(JetBrainsMono-Bold.subset.woff2) format("woff2"); + unicode-range: U+0020-007E, U+00A0-00FF, U+2010-2027, U+2190-219F, + U+2500-257F, U+2580-259F, U+25A0-25C0, U+2298, U+2605-2606, + U+2705, U+2714, U+2716, U+2718, U+26A0; +} + .gd-termshow { --gd-tp-bg: #1e1e2e; --gd-tp-fg: #cdd6f4; From 164a529e21cc1c5af46859f98dcbd91bf012030f Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Tue, 26 May 2026 00:53:14 -0400 Subject: [PATCH 8/9] Replace install snippet with termshow demo --- index.qmd | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/index.qmd b/index.qmd index 55d1d7ef..0a27e437 100644 --- a/index.qmd +++ b/index.qmd @@ -4,14 +4,7 @@ Give your Python package the documentation site it deserves. Great Docs turns yo ## Three Commands. One Beautiful Site. -```bash -pip install great-docs - -cd your-python-package -great-docs init # scans your package, writes the config -great-docs build # generates everything, renders with Quarto -great-docs preview # live preview at localhost:3000 -``` +{{< termshow file="assets/landing-demo" autoplay="true" loop="true" >}} That's it. Your API reference, CLI docs, and landing page are ready to go. Push to GitHub and you're live. From 85648b5fd69cf2cb97deb784b80d7126a8a61697 Mon Sep 17 00:00:00 2001 From: Richard Iannone Date: Tue, 26 May 2026 01:20:53 -0400 Subject: [PATCH 9/9] Remove idle_time_limit from termshow config --- assets/landing-demo.termshow.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/assets/landing-demo.termshow.yml b/assets/landing-demo.termshow.yml index ab8c50dd..cb0fb52f 100644 --- a/assets/landing-demo.termshow.yml +++ b/assets/landing-demo.termshow.yml @@ -1,7 +1,6 @@ source: assets/landing-demo.termshow settings: - idle_time_limit: 2 window_chrome: colorful chapters: @@ -25,4 +24,3 @@ snippets: duration: 6.62 text: "great-docs preview" label: "Preview" -