Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
88be00b
docs(slides): add slidey markdown import design spec
njreid May 13, 2026
e4f0f7d
docs(slides): add slidey markdown import implementation plan
njreid May 13, 2026
3a295e3
feat(slides): add slidey AST types and stub legacy parser/renderer
njreid May 13, 2026
e3ed7b6
refactor(slides): rename DiagramBlock.BlockID -> DiagramBlock.ID
njreid May 13, 2026
90b51c9
feat(slides): add per-slide frontmatter splitter
njreid May 13, 2026
db428f0
refactor(slides): normalize CRLF in splitMarkdownIntoSlideBlocks
njreid May 13, 2026
b920529
feat(slides): add inline parser for FA shortcodes and emphasis
njreid May 13, 2026
8c6bd08
feat(slides): add body block parser for paragraph/bullet/code/heading
njreid May 13, 2026
2b7bea9
feat(slides): parse ::cols::/::col2::/::col3::/::right::/::/cols:: ma…
njreid May 13, 2026
db75ac3
feat(slides): parse ::boxes::/::arrows:: icon-row blocks
njreid May 13, 2026
90b048a
feat(slides): emit DiagramBlock for ```mermaid fenced code
njreid May 13, 2026
581c2cb
feat(slides): wire slidey markdown parser orchestrator
njreid May 13, 2026
b8a0255
feat(slides): add layout-mapping and column-geometry helpers
njreid May 13, 2026
413e716
feat(slides): add asset map types and FA URL builder
njreid May 13, 2026
978380a
feat(slides): add Font Awesome SVG fetcher
njreid May 13, 2026
e3ecce3
feat(slides): add mmdc-backed mermaid renderer
njreid May 13, 2026
7874fff
feat(slides): add asset pipeline orchestrator with cleanup
njreid May 13, 2026
e552ad4
feat(slides): add Drive-backed Uploader implementation
njreid May 13, 2026
c931df8
feat(slides): replace stub renderer with single-body slide layout
njreid May 13, 2026
48906f9
feat(slides): render hero/title/statement and 2/3-column layouts
njreid May 13, 2026
c32fa87
feat(slides): emit CreateImage for diagrams and bullet-leading icons
njreid May 13, 2026
2b91761
feat(slides): wire slidey orchestrator and CLI flags
njreid May 13, 2026
b642749
test(slides): add slidey fixture deck end-to-end test
njreid May 13, 2026
a38a0a9
test(slides): use real univrs slidey deck as e2e fixture
njreid May 13, 2026
3a59ebd
docs(slides): document slidey-flavored markdown import
njreid May 13, 2026
c47bb9b
fix(slides): post-review cleanup
njreid May 13, 2026
2dfc567
fix(slides): post-smoke-test fixes from real-account import
njreid May 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@

### Added

- `slides create-from-markdown`: import slidey-flavored decks — per-slide
YAML frontmatter (`layout:`, `content:`), `## Notes` speaker notes,
Font Awesome icon shortcodes (jsDelivr CDN), mermaid diagrams (local
`mmdc`), `::cols::`/`::col2::`/`::col3::`/`::right::` columns, and
`::boxes::`/`::arrows::` icon-row blocks. New flags: `--fa-style`,
`--mmdc`, `--strict`, `--keep-temp-images`, `--no-notes`.
- Drive: add `drive share --notify` for invite targets that require a Drive notification email.
- Calendar: keep `calendar appointments` as an explicit diagnostic because the Calendar API still rejects `eventTypes=appointmentSchedule`. (#329)
- CLI: add nested `docs tabs ...` and `forms questions ...` aliases for consistent sub-item command patterns while preserving existing flat commands. (#433)
Expand Down
5 changes: 5 additions & 0 deletions docs/commands/gog-slides-create-from-markdown.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,20 @@ gog slides (slide) create-from-markdown <title> [flags]
| `--disable-commands` | `string` | | Comma-separated list of disabled commands; dot paths allowed |
| `-n`<br>`--dry-run`<br>`--dryrun`<br>`--noop`<br>`--preview` | `bool` | | Do not make changes; print intended actions and exit successfully |
| `--enable-commands` | `string` | | Comma-separated list of enabled commands; dot paths allowed (restricts CLI) |
| `--fa-style` | `string` | solid | Default Font Awesome style when shortcode has no prefix |
| `-y`<br>`--force`<br>`--assume-yes`<br>`--yes` | `bool` | | Skip confirmations for destructive commands |
| `--gmail-no-send` | `bool` | false | Block Gmail send operations (agent safety) |
| `-h`<br>`--help` | `kong.helpFlag` | | Show context-sensitive help. |
| `-j`<br>`--json`<br>`--machine` | `bool` | false | Output JSON to stdout (best for scripting) |
| `--keep-temp-images` | `bool` | | Don't delete temporary Drive uploads after import |
| `--mmdc` | `string` | mmdc | Path to mermaid CLI (mmdc); empty disables diagram rendering |
| `--no-input`<br>`--non-interactive`<br>`--noninteractive` | `bool` | | Never prompt; fail instead (useful for CI) |
| `--no-notes` | `bool` | | Discard `## Notes` sections instead of inserting as speaker notes |
| `--parent` | `string` | | Destination folder ID |
| `-p`<br>`--plain`<br>`--tsv` | `bool` | false | Output stable, parseable text to stdout (TSV; no colors) |
| `--results-only` | `bool` | | In JSON mode, emit only the primary result (drops envelope fields like nextPageToken) |
| `--select`<br>`--pick`<br>`--project` | `string` | | In JSON mode, select comma-separated fields (best-effort; supports dot paths). Desire path: use --fields for most commands. |
| `--strict` | `bool` | | Treat skipped FA/diagram assets as fatal |
| `-v`<br>`--verbose` | `bool` | | Enable verbose logging |
| `--version` | `kong.VersionFlag` | | Print version and exit |
| `--wrap-untrusted` | `bool` | false | In JSON/raw output, wrap fetched text fields in external untrusted-content markers |
Expand Down
114 changes: 89 additions & 25 deletions docs/slides-markdown.md
Original file line number Diff line number Diff line change
@@ -1,43 +1,107 @@
# Google Slides from Markdown

`gog slides create-from-markdown` creates a new Google Slides deck from a small Markdown subset.
`gog slides create-from-markdown` accepts both vanilla and slidey-flavored
markdown. Slidey conventions are documented here.

## Per-slide frontmatter

Each slide may begin with a YAML frontmatter block. Recognized keys:

| Key | Values | Behavior |
|-----------|-------------------------------------------------------|----------|
| `layout` | `title`, `hero`, `statement`, `center`, `default`, `two-cols`, `three-cols` | Picks the slide's visual treatment. Unknown values fall back to `default`. |
| `content` | `wide`, `narrow` | Parsed but not yet applied (Slides has fixed text-box widths). |

```bash
gog slides create-from-markdown "Roadmap" --content-file ./slides.md
```
---
layout: hero
---

# univrs

## File Structure
Unfolding Nested Intent · Valid · Reliable · Safe
```

Separate slides with a line containing only `---`. Each slide needs a `##` heading; slides without a heading are ignored.
A bare `---` line is a slide separator unless it opens a frontmatter block
(see the design spec §4.1 for the exact disambiguation rule).

````markdown
## Roadmap
## Speaker notes

- Ship auth migration
- Polish backup restore
- Review raw API PRs
A trailing `## Notes` (or `### Notes`) section becomes the slide's speaker
notes. The heading and everything after it are removed from the body. FA
icon shortcodes inside notes are stripped to plain text.

---
```
## Topic

## Launch Notes
body

Short paragraphs become body text.
## Notes

---
- speaker hint one
- speaker hint two
```

## Font Awesome icons

Inline shortcodes `:fa-name:`, `:fas-name:`, `:far-name:`, `:fab-name:`,
`:fal-name:`, `:fad-name:` resolve to FA Free SVGs fetched from
`cdn.jsdelivr.net` and inserted as images. Style derivation:

| Prefix | Resolved style |
|---------|----------------|
| `fa-` | `--fa-style` (default `solid`) |
| `fas-` | `solid` |
| `far-` | `regular` |
| `fab-` | `brands` |
| `fal-`, `fad-` | `solid` (FA Free has no light/duotone) |

Icons placed at the start of a bullet item render as a small inline image
to the left of the bullet text. Mid-paragraph icons are dropped.

## Mermaid diagrams

## CLI Example
Fenced code blocks tagged `mermaid` are rendered to PNG via the local
`mmdc` binary (configurable with `--mmdc`) and inserted as a full-width
image. If `mmdc` is missing, the diagram is skipped with a warning;
`--strict` makes it fatal.

```text
gog auth doctor --check
## Multi-column layouts

```
::cols::

left column markdown

::col2::

middle / right column markdown

::col3::

third column markdown

::/cols::
```
````

## Supported Markdown
`::right::` is accepted as a synonym for `::col2::` (slidey-style).

- `## Heading` becomes the slide title.
- `- item` and `* item` become bullet lists.
- Plain lines become body text.
- Fenced code blocks become code text.
- Inline emphasis markers such as `**bold**`, `_italic_`, and backticks are stripped to plain text.
## ::boxes:: and ::arrows::

```
::boxes::
:fa-rectangle-ad: Campaigns
:fa-headset: Support Tickets
::/boxes::

::arrows::

### Step One

### Step Two

::/arrows::
```

The command is intentionally layout-light: it creates title/body slides from text content. Use `slides create-from-template` when you need exact branding, placeholder replacement, or predesigned layouts.
Both render as bulleted lists in the body. Boxes use bullet glyphs;
arrows use `→`.
Loading