@taloswork/ose-shared 0.1.11 → 0.1.13
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.
- package/package.json +3 -3
- package/skills/document/SKILL.md +135 -219
- package/skills/document/art-directions/base.css +27 -2
- package/skills/document/art-directions/cinematic-depth.css +3 -1
- package/skills/document/art-directions/collage-paper.css +5 -1
- package/skills/document/art-directions/editorial-cut.css +5 -1
- package/skills/document/art-directions/geometric-pop.css +6 -0
- package/skills/document/art-directions/gradient-mesh.css +5 -1
- package/skills/document/art-directions/illustrated-doodle.css +5 -0
- package/skills/document/art-directions/luxury-ornament.css +4 -1
- package/skills/document/art-directions/maximalist-blocks.css +6 -0
- package/skills/document/art-directions/technical-grid.css +4 -0
- package/skills/document/assets/fonts/fonts.json +2 -2
- package/skills/document/assets/pdf-fonts/NotoSansSC-PDF-Bold.ttf +0 -0
- package/skills/document/assets/pdf-fonts/NotoSansSC-PDF-Regular.ttf +0 -0
- package/skills/document/assets/pdf-fonts/OFL.txt +93 -0
- package/skills/document/assets/pdf-fonts/README.md +35 -0
- package/skills/document/assets/tessdata/LICENSE-Apache-2.0.txt +202 -0
- package/skills/document/assets/tessdata/README.md +21 -0
- package/skills/document/assets/tessdata/chi_sim.traineddata.gz +0 -0
- package/skills/document/assets/tessdata/eng.traineddata.gz +0 -0
- package/skills/document/bin/deck-build.cjs +12563 -83
- package/skills/document/bin/deck-chart.cjs +771 -0
- package/skills/document/bin/deck-plan.cjs +12414 -0
- package/skills/document/bin/deck-qa.cjs +1075 -266
- package/skills/document/bin/deck-scenario.cjs +1363 -0
- package/skills/document/bin/deck-styles.cjs +1604 -0
- package/skills/document/bin/doc-convert.cjs +308 -292
- package/skills/document/bin/doc-fill.cjs +73264 -192
- package/skills/document/bin/doc-gen.cjs +2491 -312
- package/skills/document/bin/doc-run.cjs +162 -24
- package/skills/document/bin/doc-scan.cjs +13 -0
- package/skills/document/bin/doc-text.cjs +13 -0
- package/skills/document/bin/doc-validate.cjs +838 -68
- package/skills/document/bin/doc-xml.cjs +9 -5
- package/skills/document/bin/docx-annotate.cjs +95 -19
- package/skills/document/bin/docx-defaults.cjs +9907 -0
- package/skills/document/bin/fontkit.cjs +1 -0
- package/skills/document/bin/html2pptx.cjs +36622 -31394
- package/skills/document/bin/ocr-worker.cjs +1 -0
- package/skills/document/bin/ocr.cjs +131 -40
- package/skills/document/bin/pdf-form.cjs +682 -177
- package/skills/document/bin/pdf-images.cjs +13 -0
- package/skills/document/bin/pdf-ops.cjs +642 -199
- package/skills/document/bin/pdf-render.cjs +19 -3
- package/skills/document/bin/pdf-tables.cjs +13 -0
- package/skills/document/bin/pptx-clone.cjs +3 -3
- package/skills/document/bin/pptx-notes.cjs +10038 -0
- package/skills/document/bin/pptx-slide.cjs +3 -3
- package/skills/document/bin/pptx-tokenize.cjs +19 -4
- package/skills/document/bin/template-skin.cjs +10910 -0
- package/skills/document/bin/xlsx-query.cjs +192 -61
- package/skills/document/bin-reference.md +61 -33
- package/skills/document/catalog.json +33 -32
- package/skills/document/content-pipeline.md +179 -257
- package/skills/document/deck-design.md +378 -638
- package/skills/document/generated-visuals.md +99 -0
- package/skills/document/layouts/MAINTAINERS.md +33 -0
- package/skills/document/layouts/README.md +49 -36
- package/skills/document/layouts/big-stat.tpl +1 -1
- package/skills/document/layouts/capacity.json +1 -0
- package/skills/document/layouts/cards-3.tpl +1 -1
- package/skills/document/layouts/chart-full.tpl +1 -1
- package/skills/document/layouts/chart-kpi.tpl +1 -1
- package/skills/document/layouts/comparison.tpl +1 -1
- package/skills/document/layouts/data-table.tpl +1 -1
- package/skills/document/layouts/funnel.tpl +1 -1
- package/skills/document/layouts/gantt.tpl +1 -1
- package/skills/document/layouts/hub-flow.tpl +4 -0
- package/skills/document/layouts/icon-row.tpl +1 -1
- package/skills/document/layouts/image-grid.tpl +1 -1
- package/skills/document/layouts/matrix-2x2.tpl +1 -1
- package/skills/document/layouts/mock-qa.tpl +4 -0
- package/skills/document/layouts/profiles.json +2 -2
- package/skills/document/layouts/pyramid.tpl +1 -1
- package/skills/document/layouts/radar.tpl +1 -1
- package/skills/document/layouts/ring-progress.tpl +1 -1
- package/skills/document/layouts/slots.json +1 -1
- package/skills/document/layouts/steps-vertical.tpl +1 -1
- package/skills/document/layouts/steps.tpl +1 -1
- package/skills/document/layouts/three-kpi.tpl +1 -1
- package/skills/document/layouts/timeline.tpl +1 -1
- package/skills/document/layouts/toc-panel.tpl +2 -2
- package/skills/document/layouts/two-kpi.tpl +2 -2
- package/skills/document/layouts/versus.tpl +1 -1
- package/skills/document/motion/README.md +3 -2
- package/skills/document/office.md +3 -3
- package/skills/document/packs/README.md +1 -1
- package/skills/document/packs/board-brief/backdrop.html +2 -0
- package/skills/document/packs/board-brief/pack.css +2 -1
- package/skills/document/packs/mckinsey-photo/backdrop.html +2 -0
- package/skills/document/packs/mckinsey-photo/pack.css +2 -1
- package/skills/document/packs/press-room/backdrop.html +2 -0
- package/skills/document/packs/press-room/pack.css +2 -1
- package/skills/document/packs/prismatic-3d/backdrop.html +2 -0
- package/skills/document/packs/prismatic-3d/pack.css +4 -1
- package/skills/document/pdf.md +60 -43
- package/skills/document/rewrite.md +257 -309
- package/skills/document/scenarios.json +1307 -0
- package/skills/document/scenarios.schema.json +104 -0
- package/skills/document/styles/README.md +15 -25
- package/skills/document/styles/_backdrops/rimlight.html +3 -2
- package/skills/document/styles/_contract-defaults.css +31 -2
- package/skills/document/styles/_samples/_groups/biz-premium.webp +0 -0
- package/skills/document/styles/_samples/mckinsey.webp +0 -0
- package/skills/document/styles/anthropic/skin.css +6 -3
- package/skills/document/styles/apple/skin.css +4 -3
- package/skills/document/styles/bistro-warm/backdrop.html +2 -0
- package/skills/document/styles/bistro-warm/skin.css +4 -1
- package/skills/document/styles/black-gold/skin.css +6 -5
- package/skills/document/styles/bold-clash/backdrop.html +2 -0
- package/skills/document/styles/bold-clash/skin.css +2 -1
- package/skills/document/styles/branding/skin.css +4 -4
- package/skills/document/styles/campus-teal/backdrop.html +2 -0
- package/skills/document/styles/campus-teal/skin.css +2 -1
- package/skills/document/styles/cinereel/skin.css +7 -3
- package/skills/document/styles/clinic-care/backdrop.html +2 -0
- package/skills/document/styles/clinic-care/skin.css +2 -1
- package/skills/document/styles/cool/skin.css +6 -5
- package/skills/document/styles/dark-glass/backdrop.html +2 -0
- package/skills/document/styles/dark-glass/skin.css +2 -1
- package/skills/document/styles/gov-brief/backdrop.html +2 -0
- package/skills/document/styles/gov-brief/skin.css +2 -1
- package/skills/document/styles/grid-tech/backdrop.html +2 -0
- package/skills/document/styles/grid-tech/skin.css +2 -1
- package/skills/document/styles/hand-drawn/skin.css +3 -3
- package/skills/document/styles/ivory-gold/skin.css +7 -6
- package/skills/document/styles/legal-slate/backdrop.html +2 -0
- package/skills/document/styles/legal-slate/skin.css +2 -1
- package/skills/document/styles/magazine-ink/skin.css +4 -3
- package/skills/document/styles/mckinsey/backdrop.html +7 -5
- package/skills/document/styles/mckinsey/skin.css +2 -1
- package/skills/document/styles/memphis/backdrop.html +2 -0
- package/skills/document/styles/memphis/skin.css +2 -1
- package/skills/document/styles/mono/skin.css +6 -2
- package/skills/document/styles/neon-cyber/backdrop.html +2 -0
- package/skills/document/styles/neon-cyber/skin.css +2 -1
- package/skills/document/styles/olive-gold/skin.css +7 -6
- package/skills/document/styles/organic-earth/backdrop.html +2 -0
- package/skills/document/styles/organic-earth/skin.css +2 -1
- package/skills/document/styles/pastel-saas/backdrop.html +2 -0
- package/skills/document/styles/pastel-saas/skin.css +2 -1
- package/skills/document/styles/portfolio-noir/backdrop.html +2 -0
- package/skills/document/styles/portfolio-noir/skin.css +2 -1
- package/skills/document/styles/retro-press/backdrop.html +2 -0
- package/skills/document/styles/retro-press/skin.css +2 -1
- package/skills/document/styles/sport-arena/backdrop.html +2 -0
- package/skills/document/styles/sport-arena/skin.css +4 -1
- package/skills/document/styles/swiss-grid/skin.css +10 -5
- package/skills/document/styles/wedding-blush/backdrop.html +2 -0
- package/skills/document/styles/wedding-blush/skin.css +4 -1
- package/skills/document/theme-system.md +85 -77
- package/skills/document/themes/README.md +7 -5
- package/skills/document/vision.md +8 -5
- package/skills/document/xlsx.md +15 -25
- package/skills/grill-me/SKILL.md +6 -0
- package/skills/grill-me/agents/openai.yaml +5 -0
- package/skills/grilling/SKILL.md +28 -0
- package/skills/grilling/agents/openai.yaml +3 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# Generated visuals inside a deck
|
|
2
|
+
|
|
3
|
+
Assess whether generated scenes, product concepts or illustrations will help the
|
|
4
|
+
deck explain its message. The user need not explicitly request image generation.
|
|
5
|
+
Choose about 2–3 useful visual pages, not a quota; use fewer or none for a short or
|
|
6
|
+
data-heavy deck, and respect a request to avoid generated images.
|
|
7
|
+
|
|
8
|
+
The agent calls the actual available `gen` tools; `deck-plan` and `deck-build` only
|
|
9
|
+
assemble existing assets, so rebuilding a deck never regenerates images. The gen
|
|
10
|
+
connector is enabled by default. Call its discovered MCP tool directly using the
|
|
11
|
+
exposed schema for model parameters and references; do not invent tool names or
|
|
12
|
+
duplicate provider-specific rules. Respect a manually disabled connector. If no
|
|
13
|
+
generation tool is available, report that limitation rather than enabling a connector
|
|
14
|
+
or promising an image.
|
|
15
|
+
|
|
16
|
+
## Plan before generating
|
|
17
|
+
|
|
18
|
+
Include selected visual pages in the confirmed slide count. In `plan.json`, give each
|
|
19
|
+
its conclusion, visual purpose, mode, notes and a `file` path. The outline
|
|
20
|
+
can reference a file that does not exist yet; `deck-build` needs it after generation.
|
|
21
|
+
Use the existing outline/style confirmation before generation, with no separate image authorization.
|
|
22
|
+
Supporting visuals that preserve an approved outline's message and slide count need no
|
|
23
|
+
new approval, even when chosen later during production.
|
|
24
|
+
|
|
25
|
+
Default to **generated image + HTML text**: scene, product concept or illustration in
|
|
26
|
+
the image; title, conclusion, accurate figures and sources in the HTML. Native text
|
|
27
|
+
remains editable unless the selected skin bakes that class (`--talos-bake:1`).
|
|
28
|
+
**Whole-page image** is an option for a poster or visual story; its internal text and
|
|
29
|
+
objects cannot be edited separately. Keep evidence-based charts in the chart tools;
|
|
30
|
+
describe a generated concept as a concept, not a photo of a real event or a source.
|
|
31
|
+
|
|
32
|
+
Example slide entry among the ordinary slides in `plan.json`:
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"role": "content",
|
|
37
|
+
"title": "One workspace brings the team together",
|
|
38
|
+
"image": true,
|
|
39
|
+
"file": "visuals/workspace.html",
|
|
40
|
+
"narrative": "Generated visual: a shared workspace concept, image plus HTML text; make the proposed experience concrete.",
|
|
41
|
+
"notes": "Concept illustration. Explain how shared context reduces handoffs."
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Keep plan and spec in the same directory: `file` is resolved relative to the spec.
|
|
46
|
+
Planning keeps the slide's position and notes; write its visible text in the HTML,
|
|
47
|
+
since file slides do not fill catalog slots. Do not put `<img>` into ordinary `slots`
|
|
48
|
+
(they escape HTML), and `image: true` alone does not supply an asset.
|
|
49
|
+
|
|
50
|
+
## Generate for the actual image box
|
|
51
|
+
|
|
52
|
+
Once approved, prepare each prompt for the intended box: message, subject/action,
|
|
53
|
+
selected palette and photographic/illustration style, subject placement, crop
|
|
54
|
+
tolerance and text space. Set size and aspect ratio in the tool fields for the actual
|
|
55
|
+
image box. Keep titles and exact numbers outside the image by default. For related scenes, carry the same product/person references and visual
|
|
56
|
+
direction through the supported `gen` reference mechanism.
|
|
57
|
+
|
|
58
|
+
Keep a small working record of slide number, prompt file, references and returned
|
|
59
|
+
image path. Use the **exact absolute path returned by `gen`** in the HTML; do not
|
|
60
|
+
rename or move the image. The assembled deck may be in a different directory from
|
|
61
|
+
the per-slide file. Escape HTML attribute characters in the path (`&`, `"`, `<`).
|
|
62
|
+
Inspect each generated result before assembling. Reuse it for text/layout revisions;
|
|
63
|
+
regenerate only when the image needs to change.
|
|
64
|
+
|
|
65
|
+
If gen is unavailable, or a login or network failure prevents generation, report the
|
|
66
|
+
actual error and affected pages. Do not claim a placeholder was generated. If a
|
|
67
|
+
non-generated layout is a suitable fallback, disclose the change and revise the plan
|
|
68
|
+
and slide together; never silently substitute an image already committed in the outline.
|
|
69
|
+
Keep required-image checks on every generated image that remains in the deck.
|
|
70
|
+
|
|
71
|
+
## Assemble through the existing file route
|
|
72
|
+
|
|
73
|
+
Write exactly one `section.slide` per file. Example split page (replace the example
|
|
74
|
+
image path with the real tool result and match the selected skin's type/spacing):
|
|
75
|
+
|
|
76
|
+
```html
|
|
77
|
+
<section class="slide" style="position:relative;width:1280px;height:720px">
|
|
78
|
+
<h2 class="deck-title" style="position:absolute;left:64px;top:80px;width:1152px;margin:0;color:var(--title);font-size:calc(48px * var(--type-scale,1))">One workspace brings the team together</h2>
|
|
79
|
+
<p style="position:absolute;left:64px;top:250px;width:420px;color:var(--body);font-size:calc(28px * var(--type-scale,1))">Shared context makes the next step visible.</p>
|
|
80
|
+
<img data-required-image src="/absolute/path/returned-by-gen.png" alt="Concept illustration of a shared team workspace" style="position:absolute;left:552px;top:210px;width:656px;height:420px;object-fit:cover">
|
|
81
|
+
</section>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
`data-required-image` is a presence marker: even `="false"` means required. Use it on
|
|
85
|
+
every generated content image. Local read, fetch or browser decode failure blocks
|
|
86
|
+
previews and PPTX export. Repair the path or asset; never silently replace
|
|
87
|
+
a required image with a placeholder, drop the page, or remove the marker to deliver.
|
|
88
|
+
|
|
89
|
+
An uploaded template keeps its title bar, logo and footer: use `h2.deck-title` and
|
|
90
|
+
keep content at top ≥210px in its content zone. A whole-page image must also fit that
|
|
91
|
+
zone; only use full bleed when the selected style permits it. Preserve the deck's
|
|
92
|
+
export mode: a few generated images do not require global `--rasterize`.
|
|
93
|
+
|
|
94
|
+
Build with the usual `deck-build` → `html2pptx` commands and the same style flags.
|
|
95
|
+
Follow deck-design.md's preview and final QA once per image: verify page order and
|
|
96
|
+
notes, image presence, subject crop, image text, contrast, template chrome and style
|
|
97
|
+
consistency across the generated pages. Fix and recheck only changed pages.
|
|
98
|
+
Deliver a PDF by converting the final PPTX through `doc-convert`, including its embedded
|
|
99
|
+
images; do not separately print the slide HTML.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Maintaining the layout library
|
|
2
|
+
|
|
3
|
+
Not read while making a deck — this is for whoever edits a `.tpl`, a skin's geometry or
|
|
4
|
+
the catalog.
|
|
5
|
+
|
|
6
|
+
- **Slot index.** Regenerate `layouts/slots.json` with `node scripts/deck/gen-slots.mjs`
|
|
7
|
+
after touching a `.tpl`.
|
|
8
|
+
- **Capacity is measured, not written down.** `layouts/capacity.json` holds, per layout ×
|
|
9
|
+
catalog style, how wide each slot's text may get (CJK = 1, Latin ≈ 0.5), how many rows
|
|
10
|
+
each `{{#rows}}` block holds, and each chart's box — measured in headless Chromium by
|
|
11
|
+
`node scripts/deck/gen-capacity.mjs` (≈5 min). Re-run it after touching a `.tpl`, a
|
|
12
|
+
skin's geometry (sizes, spacing, `--type-scale`) or the catalog;
|
|
13
|
+
`tests/unit/deck-capacity.test.ts` fails until you do (colour-only edits are ignored).
|
|
14
|
+
- **Optional lines** (2026-10-09): `subhead` (one line at `top:246px`, under a one-line
|
|
15
|
+
title) and `takeaway` (one line at `bottom:56px`, above the footer rule) are offered only
|
|
16
|
+
by layouts whose content clears them in every catalog style — measured: content top
|
|
17
|
+
≥ 282px for `subhead`, content bottom ≤ 620px at the designed 3-row fill for
|
|
18
|
+
`takeaway`. Both render nothing when empty (`.deck-subhead:empty`,
|
|
19
|
+
`.deck-takeaway:empty` in `styles/_contract-defaults.css`).
|
|
20
|
+
|
|
21
|
+
**不要给可变内容写死容器高度**(`.tpl` 与 bespoke 页都适用)。皮肤给 `.card` 设了
|
|
22
|
+
`overflow:hidden` 时,`.card{height:…px}` 会把超出的文字**静默裁掉**(`blocks-2x2` 就这样
|
|
23
|
+
带病出厂过)。让高度由内容决定:网格用 `grid-auto-rows:min-content`(必须显式写
|
|
24
|
+
`min-content`——`1fr`/`auto` 的自动下限对 `overflow` 非 visible 的网格项一律归零),余量
|
|
25
|
+
交给外层 `justify-content:space-between`。这样超量内容会顶出页面,被 `deck-qa` 的
|
|
26
|
+
`off-canvas`/`overlap` 抓到。PPTX walker 不保留祖先的裁切,原来在 HTML 中被裁掉的字可能
|
|
27
|
+
完整画到容器外;版式生产线的 `scripts/deck/deck-qa-sweep.mjs` 用 `clipped` 阻断裁切。
|
|
28
|
+
|
|
29
|
+
`spill` measures in-flow text outside its nearest painted container. It remains
|
|
30
|
+
advisory until the capacity probe uses the same measure; `decor-overlap` remains
|
|
31
|
+
blocking. Explicitly positioned or transformed elements are excluded because a
|
|
32
|
+
badge may intentionally cross its parent edge. Keep both clipped and visible
|
|
33
|
+
overflow fixtures when changing the measurement.
|
|
@@ -1,32 +1,33 @@
|
|
|
1
1
|
# Layout library (structure) — pick by role + P1/P2/P3
|
|
2
2
|
|
|
3
3
|
**Layouts are structure only** — grid, positions, semantic classes, `data-layout` id,
|
|
4
|
-
**zero color** (they pass `lintHardcodedColors`).
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
**zero color** (they pass `lintHardcodedColors`); the skin paints them. This file is the
|
|
5
|
+
single source for layout selection (P1/P2/P3) and the fill contract. One catalog style
|
|
6
|
+
for the whole deck (never mix); which entries take Theme V2 and which layouts need it:
|
|
7
|
+
`../theme-system.md`.
|
|
7
8
|
|
|
8
9
|
## How to pick (the deterministic selection)
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
Themes within one deck.
|
|
11
|
+
`bin/deck-plan.cjs` applies these rules mechanically, plus the measured capacity — run
|
|
12
|
+
it rather than matching by hand. The rules, in priority order (P1 outranks P2 outranks
|
|
13
|
+
P3; never trade fit for variety):
|
|
14
14
|
|
|
15
|
-
**
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
is it a diagram? pure text? → match `structure` + `has-image` below.
|
|
22
|
-
- **P2 density**: 1–2 points → `light`; 3–4 → `medium`; 5–6 → `dense`. → match `density`.
|
|
15
|
+
- **P1 structure / image** (most important): image or not, which side, diagram or pure
|
|
16
|
+
text → match `structure` + `has-image` below. Never force text into an image slot or
|
|
17
|
+
an image into a text slot; drop an unused image slot rather than leave a placeholder.
|
|
18
|
+
- **P2 density**: 1–2 points → `light`; 3–4 → `medium`; 5–6 → `dense` → match
|
|
19
|
+
`density`. Match the slot count to the point count — condense content to ≤6 items,
|
|
20
|
+
remove spare slots.
|
|
23
21
|
- **P3 diversity (ENFORCED)**: never the same content layout **twice in a row**, and
|
|
24
|
-
**≤2× total** across the deck
|
|
25
|
-
break it. Structural
|
|
26
|
-
|
|
22
|
+
**≤2× total** across the deck — vary the variant even when the family repeats.
|
|
23
|
+
`html2pptx` warns at render when you break it. Structural layouts (cover / toc /
|
|
24
|
+
section / transition / title / ending and their variants) are exempt: reuse ONE
|
|
25
|
+
`section` layout for every chapter break. If P1+P2 can't be met without repeating,
|
|
26
|
+
author a bespoke slide (deck-design.md) instead of a wrong-fit layout.
|
|
27
27
|
|
|
28
|
-
Per role: **cover** once; **toc** by chapter count
|
|
29
|
-
**ending** once, by
|
|
28
|
+
Per role: **cover** once; **toc** by chapter count (3–4 → centred/large title, 5–6 →
|
|
29
|
+
list/grid, 7+ → dense/two-column); **section** reused per chapter; **ending** once, by
|
|
30
|
+
purpose (thanks / Q&A / contact).
|
|
30
31
|
|
|
31
32
|
## How to fill (the deck-build contract)
|
|
32
33
|
|
|
@@ -36,8 +37,9 @@ slide fills a layout through three inputs:
|
|
|
36
37
|
- **`slots`** — one value per `{{name|default}}` → `{"layout":"cover","slots":{"title":"…"}}`
|
|
37
38
|
- **`rows`** — a variable-length list per `{{#key}}…{{/key}}` block; each row fills that
|
|
38
39
|
block's own fields, and `{{_n}}`/`{{_nn}}` number the copies for you.
|
|
39
|
-
- **`chart`** — replaces the layout's
|
|
40
|
-
|
|
40
|
+
- **`chart`** — replaces the layout's chart data; an array fills several charts in
|
|
41
|
+
document order. Native editable `c:chart` by default; `"chartRender":"svg"` (spec) or
|
|
42
|
+
`"render":"svg"` (one chart) draws it as SVG — choice per deck-design.md "Charts".
|
|
41
43
|
|
|
42
44
|
**Figure layouts take INPUT fields the template never prints** — deck-build derives the
|
|
43
45
|
geometry from them, so the drawing always matches the numbers:
|
|
@@ -50,31 +52,40 @@ geometry from them, so the drawing always matches the numbers:
|
|
|
50
52
|
| `radar` | `metrics` | `name`,`score` | **the radar chart itself** |
|
|
51
53
|
|
|
52
54
|
`radar` is marked `"chart": "derived"` in slots.json: its chart is built from `metrics`,
|
|
53
|
-
so pass rows
|
|
55
|
+
so pass rows, never chart data; `chart` may only add options (`{"max": 10}` = the outer
|
|
56
|
+
ring, else a clean ceiling over the scores; `unit`, `showValues`, `render`).
|
|
57
|
+
`deck-plan` routes a single-series `{type:"radar"}` chart here as `metrics` (a 660×394
|
|
58
|
+
box vs chart-full's 1120×316 strip, where a radar is height-bound and small).
|
|
54
59
|
|
|
55
60
|
Plain list layouts take rows too: `team-row.members{name,role}` ·
|
|
56
61
|
`brand-values.values{name,body}` · `color-palette.swatches{name,hex}` ·
|
|
57
62
|
`steps-vertical.steps{name,body}` · `toc-panel.entries{name,desc}`.
|
|
58
63
|
|
|
64
|
+
**Optional lines** — a slide's `subtitle` (口径 / why it matters) and `takeaway` (启示) fill
|
|
65
|
+
`subhead` (under a one-line title) and `takeaway` (above the footer), offered by
|
|
66
|
+
cards-3 · three-kpi · two-kpi · steps · steps-vertical · timeline · icon-row ·
|
|
67
|
+
ring-progress · versus · data-table · image-grid · gantt (both) and funnel · pyramid ·
|
|
68
|
+
matrix-2x2 (subtitle) · comparison (takeaway). Left out, they render nothing; written for
|
|
69
|
+
a layout without the line, `deck-plan` warns `dropped` and ranks a layout that has it.
|
|
70
|
+
|
|
59
71
|
Anything the spec gets wrong — unknown layout/slot/field, a repeat block with no rows, a
|
|
60
72
|
figure row missing its numbers — **fails the build** (exit 1, nothing written) rather than
|
|
61
|
-
shipping the template's demo content.
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
`overflow:hidden`
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
裁掉的文字不会出现在 pptx 的几何里,运行时的 `deck-qa` 看不到——它只在版式生产线的
|
|
71
|
-
`scripts/deck/deck-qa-sweep.mjs`(`clipped` 硬失败,逐个版式扫整册库)里被拦截;写 bespoke
|
|
72
|
-
页时请直接避免定高容器。
|
|
73
|
+
shipping the template's demo content. **Capacity is measured** (`layouts/capacity.json`,
|
|
74
|
+
per layout × style: slot widths, row ceilings, chart boxes): `deck-plan` picks with it,
|
|
75
|
+
`deck-build` rejects overflow with it. The density column below feeds `deck-plan` too: a
|
|
76
|
+
rows layout is not offered for fewer items than its `(n–m)` names. A bespoke slide never
|
|
77
|
+
fixes a card's height around variable text (`overflow:hidden` clips it silently) — use
|
|
78
|
+
`grid-auto-rows:min-content`. Maintaining layouts: `layouts/MAINTAINERS.md`.
|
|
79
|
+
|
|
80
|
+
QA: `clipped` and `decor-overlap` block; `spill` is advisory. The PPTX walker does
|
|
81
|
+
not reproduce ancestor clipping, so inspect the exported deck too.
|
|
73
82
|
|
|
74
83
|
## Catalog
|
|
75
84
|
|
|
76
85
|
Each slide carries `data-layout="<id>"` (drives the diversity lint + traceability).
|
|
77
86
|
|
|
87
|
+
**Theme V2 only:** `pitch-problem` · `pitch-solution` · `market-rings` · `product-device` · `traction-milestones` · `business-model` · `pricing-tiers` · `funding-ask` · `customer-proof` · `team-founders` (profiles.json `themeV2Layouts`). A style in the `classic-v1` collection (cool, mckinsey, apple …) renders V1 and cannot use them — `deck-plan --layouts --style <id>` lists exactly what a style can use and the content each layout takes.
|
|
88
|
+
|
|
78
89
|
| layout-id | role | structure (P1) | density (P2) | has-image (P1) | pick when |
|
|
79
90
|
|---|---|---|---|---|---|
|
|
80
91
|
| `cover` | cover | hero · left-title | — | text-only (bg) | 封面 / 开场 |
|
|
@@ -107,6 +118,8 @@ Each slide carries `data-layout="<id>"` (drives the diversity lint + traceabilit
|
|
|
107
118
|
| `image-left` | content | image-left + text-right | medium (3) | **photo/diagram slot** | 图文案例(图在左) |
|
|
108
119
|
| `image-grid` | content | 3-up image gallery + captions | medium (3) | **photo slots** | 三图并列 / 图库 |
|
|
109
120
|
| `concept-hub` | content | center concept + satellites | medium (4) | text-only | 核心框架(中心+维度) |
|
|
121
|
+
| `hub-flow` | content | 3 inputs → core → result | medium (3) | text-only | 多源汇聚→核心→产出(产品原理/数据流) |
|
|
122
|
+
| `mock-qa` | content · product | interface sketch: question → cited answer + 2 sources | light (2) | text-only | 产品问答/证据链示意(无截图时) |
|
|
110
123
|
| `image-full` | content | full-bleed image + overlay caption | light | **full-bleed photo** | 全出血大图 + 压字说明 |
|
|
111
124
|
| `cover-image` | cover | full-bleed image + overlay title | — | **full-bleed photo** | 图片封面(压字) |
|
|
112
125
|
| `timeline` | content | horizontal dated timeline | medium (4–5) | text-only | 时间轴 / 发展历程 |
|
|
@@ -115,7 +128,7 @@ Each slide carries `data-layout="<id>"` (drives the diversity lint + traceabilit
|
|
|
115
128
|
| `section-stat` | section | ghost-number + hero stat | light | text-only | 章节页(带关键数字) |
|
|
116
129
|
| `transition` | transition | minimal big-number break | light | text-only | 纯过渡页(整册复用一个) |
|
|
117
130
|
| `funnel` | content · data | narrowing funnel stages | medium (4) | text-only | 转化漏斗 |
|
|
118
|
-
| `radar` | content · data |
|
|
131
|
+
| `radar` | content · data | radar chart (SVG or native) + score list (rows) | medium (4–6) | diagram (chart) | 能力雷达 / 多维评估 |
|
|
119
132
|
| `ring-progress` | content · data | ring gauges (rows) | medium (2–4) | diagram | 环形进度 / 完成率 |
|
|
120
133
|
| `icon-row` | content | icon row (3–4) | medium (4) | text-only | 图标行 · 能力/特性(L16) |
|
|
121
134
|
| `gantt` | content · data | gantt schedule bars (rows) | dense | text-only | 甘特图 / 项目排期 |
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
<!-- layouts/big-stat — structure-only (paint via styles/<skin>/skin.css). data-layout drives P1/P2/P3 + dedup. -->
|
|
2
2
|
<section class="slide" data-layout="big-stat" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div><div class="eyebrow-row" style="position:absolute;left:calc(96px * var(--space-scale,1));top:132px;display:flex;align-items:center;gap:14px"><span class="accent-bar" style="width:30px;height:1px;display:inline-block"></span><span class="eyebrow" style="font-size:calc(13px * var(--type-scale,1));letter-spacing:.28em">{{eyebrow|KEY METRIC}}</span></div><h2 class="deck-title" style="position:absolute;left:calc(92px * var(--space-scale,1));top:158px;font-size:calc(48px * var(--type-scale,1));letter-spacing:-.4px">{{title|}}</h2>
|
|
3
|
-
<div class="stat-num" style="position:absolute;left:90px;top:250px;font-weight:800;line-height:1;font-size:calc(216px * var(--type-scale,1));letter-spacing:-2px">{{stat|585}}<span class="stat-unit" style="font-size:calc(64px * var(--type-scale,1))">{{unit| 单位}}</span></div><div class="stat-lead" style="position:absolute;left:100px;top:520px;font-size:calc(30px * var(--type-scale,1));font-weight:600">{{lead|一句结论,数字说明了什么}}</div><p class="stat-note" style="position:absolute;left:100px;top:580px;width:900px;font-size:calc(17px * var(--type-scale,1));line-height:1.6">{{note|一句支撑说明,给上下文与来源。}}</p>
|
|
3
|
+
<div class="stat-num" style="position:absolute;left:calc(90px * var(--space-scale,1));top:250px;font-weight:800;line-height:1;font-size:calc(216px * var(--type-scale,1));letter-spacing:-2px">{{stat|585}}<span class="stat-unit" style="font-size:calc(64px * var(--type-scale,1))">{{unit| 单位}}</span></div><div class="stat-lead" style="position:absolute;left:calc(100px * var(--space-scale,1));top:520px;font-size:calc(30px * var(--type-scale,1));font-weight:600">{{lead|一句结论,数字说明了什么}}</div><p class="stat-note" style="position:absolute;left:calc(100px * var(--space-scale,1));top:580px;width:900px;font-size:calc(17px * var(--type-scale,1));line-height:1.6">{{note|一句支撑说明,给上下文与来源。}}</p>
|
|
4
4
|
<div class="rule rule-foot" style="position:absolute;left:calc(96px * var(--space-scale,1));right:calc(96px * var(--space-scale,1));bottom:40px;height:1px"></div><div class="deck-footer" style="position:absolute;left:calc(96px * var(--space-scale,1));bottom:17px;font-size:calc(12px * var(--type-scale,1));letter-spacing:.1em">{{footer|报告标题 / 章节}}</div><div class="deck-pageno" style="position:absolute;right:calc(96px * var(--space-scale,1));bottom:17px;font-size:calc(12px * var(--type-scale,1))">{{pageno|01}}</div></section>
|