Files
open-design/plugins/_official/examples/fs-electric-studio/open-design.json
T
eb749841b4 fix(home): surface community slide decks on Home with letterbox-free 16:9 previews (#4350)
* fix(plugins): surface slides decks on Home instead of marketplace sources

The 23 community slides/deck plugins from #4127 were registered as a
restricted community marketplace source, so they showed up as installable
"available sources" cards (受限 + Install) instead of on Home. Relocate them
to plugins/_official/examples so they ship bundled — appearing in the Home
Community gallery and the deck example-prompt rail, exactly like the existing
zhangzara / swiss / guizang decks — and drop their community-registry entries.

- Move 23 plugins/community/<slug> → plugins/_official/examples/<slug>
  (upstream LICENSE / author / homepage / "Based on" attribution preserved)
- Rename manifest name community-<slug> → example-<slug> (bundled convention)
- Remove the 23 entries from plugins/registry/community/open-design-marketplace.json
  (the 3 pre-existing community entries stay)
- HomeHero: uncap the deck example-prompt rail (other chips keep the curated 18)
  so every bundled slide template is reachable straight from "All"
- curatedPriority: pin the 23 slides to the front of both the deck example rail
  and the Community Slides shelf

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(home): drop provenance tail from deck seeds & fix deck preview letterbox

Two polish fixes for the slide/deck plugins now surfaced on Home:

1. Example-prompt seed: strip a trailing source-attribution sentence
   ("…。移植自 foo/bar 的 baz 模板。" / "Based on …") from the composer seed so
   the prompt doesn't end on provenance boilerplate. Conservative — only fires
   when the final sentence opens with an attribution marker and real text
   precedes it; attribution woven mid-description (followed by a use-case
   sentence) and the gallery/detail descriptions are left intact. Latin '.'
   only ends a sentence at whitespace/EOL so "STYLE_PRESETS.md" / "github.com/…"
   don't mis-split.

2. Deck gallery preview: decks ship a fixed 16:9 stage that scales to its
   viewport, so the tall scroll-preview frame letterboxed it and showed a dark
   --stage-bg band above/below the slide. Tag deck cards with data-od-mode and
   give them a 16:9 frame the iframe fills natively (no transform, no pan), so
   the stage sits edge-to-edge with no band.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(home): deck preview frame to 16:9 so no white strip below the slide

The deck preview override targeted the inner html-frame while the gallery frame
kept its fixed 300px height, leaving a white strip under the 16:9 slide. Make
the gallery frame itself 16:9 for deck cards so the stage fills it exactly —
title bar + slide, nothing left over.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(decks): hide the page-counter chrome on all 23 community slide decks

The five upstream deck families each render a different page-counter ("1 / 10")
— a center pill (.deck-controls), an id="counter" badge, a fixed .deck-counter,
or a .count span inside a Shadow-DOM rail — so the home gallery thumbnails
showed it inconsistently. Per maintainer request, drop it everywhere rather
than unify: inject a display:none rule for the light-DOM counters and inline-
hide the Shadow-DOM .count span. Keyboard/touch navigation is untouched; only
the visual counter is removed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(home): fix deck letterbox band in the example-prompt rail tiles too

The earlier 16:9 deck-preview fix only covered the Community gallery cards; the
hero example-prompt rail tiles render the deck in a 4:3 (1440×1080) preview and
still showed a dark --stage-bg band on top. Tag deck preset tiles with
data-od-mode and give them a 16:9 preview the iframe fills natively, matching
the gallery treatment.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(home): remove the ↗ open-external button from community gallery cards

The ↗ only rendered when a tile's preview was an HTML source, so it
appeared on some cards (most decks, a few prototypes) and not others
(images, srcless tiles) — inconsistent chrome across the shelf. Drop it
and the whole onOpenExternal pass-through (PluginCard → PluginsHomeSection
→ HomeView) plus the now-dead .plugins-home__gallery-open styles.

* fix(home): make the community search clear (×) button visible

The clear button uses the shared <Button> component, whose CSS-module
class set padding 6/12 and crushed the 12px × glyph to zero width inside
the 26px button (a blank grey square). The .plugins-home__search-clear
reset only out-specified the global `button {}` element rule, not the
component class — scope it under .plugins-home__search so the padding:0 /
20x20 sizing actually wins.

* fix(home): align deck example-prompt tile title row with other tiles

Deck preset tiles used a 16:9 `auto` preview row, so their card was
shorter than the fixed-150px sibling tiles; the flex rail stretched them
back up and the slack leaked into the title row, making deck titles ~6px
taller. Keep deck tiles on the standard 150px preview cell and center the
native 16:9 stage inside it (neutral margin, no dark band), so card and
title-row heights match prototype/HyperFrames/image tiles.

* fix(deck-bridge): mirror the visible class so reveal animations fire on navigation

Reveal-animation decks (the frontend-slides family) gate staggered
entrances on a separate `.slide.visible` class that the deck's own show()
adds alongside `.active`. The host bridge's setActive() flipped only the
active class, so bridge-driven page turns showed slide chrome but left
every .reveal child at opacity:0 — the body rendered blank. Mirror
`.visible` in lock-step with the active slide (only for decks that use it,
a no-op elsewhere). Adds a red→green regression test.

* fix(home): unpin the bare Frontend Slides template from the slides shelf

example-frontend-slides is the family-root template with a generic cover;
pinned first it read as filler leading the Slides shelf and deck chip.
Drop it from PINNED_SLIDE_PLUGIN_IDS so it falls to the uncurated tail
while the styled variants (Creative Voltage, Electric Studio, …) keep the
lead.

---------

Co-authored-by: free666799 <293857035+free666799@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 09:32:15 +00:00

159 lines
8.9 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"$schema": "https://open-design.ai/schemas/plugin.v1.json",
"specVersion": "1.0.0",
"name": "example-fs-electric-studio",
"title": "Electric Studio",
"title_i18n": {
"en": "Electric Studio",
"zh-CN": "钴蓝工作室"
},
"version": "1.0.0",
"description": "Bold, clean split-panel HTML decks: white panel over cobalt #4361ee, brand marks in the corners, a dark accent bar on the panel edge, quote typography as the hero element, all-Manrope (800/400), confident restrained spacing. Fixed 1920x1080 stage scaled uniformly to any viewport, zero dependencies. Based on zarazhangrui/frontend-slides electric-studio (STYLE_PRESETS section 2).",
"description_i18n": {
"en": "Bold, clean split-panel HTML decks: white panel over cobalt #4361ee, brand marks in the corners, a dark accent bar on the panel edge, quote typography as the hero element, all-Manrope (800/400), confident restrained spacing. Fixed 1920x1080 stage scaled uniformly to any viewport, zero dependencies. Based on zarazhangrui/frontend-slides electric-studio (STYLE_PRESETS section 2).",
"zh-CN": "大胆干净的上下分割面板 HTML 幻灯片:白色面板 × 钴蓝 #4361ee 面板,四角 brand marks,面板接缝处深色 accent bar,引文排印作为主视觉,全 Manrope(800/400),克制自信的留白。固定 1920x1080 舞台等比缩放适配任意视口,零依赖单文件。Based on zarazhangrui/frontend-slides electric-studio (STYLE_PRESETS section 2)。"
},
"license": "MIT",
"author": {
"name": "zarazhangrui",
"url": "https://github.com/zarazhangrui"
},
"homepage": "https://github.com/zarazhangrui/frontend-slides",
"plugin": {
"repo": "https://github.com/zarazhangrui/frontend-slides"
},
"tags": [
"community",
"deck",
"slides",
"presentation",
"split-panel",
"cobalt",
"bold",
"manrope",
"web",
"ppt"
],
"compat": {
"agentSkills": [
{
"path": "./SKILL.md"
}
]
},
"od": {
"kind": "scenario",
"taskKind": "new-generation",
"mode": "deck",
"scenario": "product",
"surface": "web",
"preview": {
"type": "html",
"entry": "./example.html",
"motion": "deck"
},
"useCase": {
"query": {
"en": "Create an Electric Studio {{deckType}} for {{audience}} about {{topic}} with {{slideCount}}, as a {{density}} deck. Output one self-contained single-file HTML deck with zero dependencies (all CSS/JS inline, no build step, no external JS libraries, icons as inline SVG, charts as pure CSS). The Electric Studio theme is LOCKED - start from this plugin's example.html seed and replace content only; never redesign. Hard rules: (1) Fixed 16:9 stage - author every slide on a 1920x1080 canvas inside .deck-viewport > .deck-stage and scale the whole stage uniformly with one transform (factor = min(innerWidth/1920, innerHeight/1080), centered with letterbox); never reflow content per device, no responsive breakpoints inside slides; keep the seed's full viewport-base.css block and the entire SlidePresentation controller script verbatim (keyboard arrows/Space/PageUp/PageDown/Home/End, debounced wheel, touch swipe, #/<index> hash routing, page counter chrome fixed outside the scaled stage). (2) Each page is one <section class=\"slide\"> switched via .active/.visible classes toggling visibility/opacity/pointer-events - never display:none. (3) Locked design tokens, all in :root and nowhere else: --bg-dark:#0a0a0a; --bg-white:#ffffff; --accent-blue:#4361ee; --text-dark:#0a0a0a; --text-light:#ffffff; soft variants --text-dark-soft:rgba(10,10,10,.58), --text-light-soft:rgba(255,255,255,.72); hairlines --line-dark:rgba(10,10,10,.14), --line-light:rgba(255,255,255,.28); --blue-soft:rgba(67,97,238,.10). No other hues - no gradients, no purple, no warm accents. (4) Locked typography: Manrope only (Google Fonts, weights 400/500/800); display type is Manrope 800 with tight negative letter-spacing (-0.025em to -0.035em); body is 400/500; kickers and marks are 800 uppercase with wide tracking. Never substitute another typeface. (5) Locked layout system - every slide is a vertical two-panel split (.split > .panel-white + .edge-bar + .panel-blue): white panel above, cobalt #4361ee panel below, with a 14px dark #0a0a0a accent bar (.edge-bar) on the panel seam; vary only the split ratio per master (50/50 title, shallow-top dividers/closings with the blue panel dominant, deep-top content slides with a blue takeaway strip). Brand marks sit in the four corners of every slide (.mark-tl/.mark-tr/.mark-bl/.mark-br): cobalt chip + wordmark top-left, section label top-right, deck label bottom-left, NN / NN page mark bottom-right; marks over white are dark, marks over blue are light. (6) Quote typography is the hero visual language: at least one quote-hero slide with an oversized cobalt ldquo mark and Manrope 800 statement type around 92px; no photography, no illustrations - type, flat panels, and the cobalt chip are the only decoration; keep spacing confident and restrained. (7) Compose slides from the seed's masters: title (50/50 statement), agenda (numbered rows on blue), section divider (outlined giant number on cobalt), bullets (ticks on white + takeaway strip on blue), big stat (oversized cobalt number), quote hero, comparison (white panel = their way vs blue panel = our way), 2x2 principle grid on cobalt, pure-CSS bar chart (cobalt bars, scaleY entrance), closing (blue dominant statement). (8) Motion: entrances only via .reveal elements staggered with transition-delay (~0.1s steps) when the slide gains .visible; single easing cubic-bezier(0.16,1,0.3,1); animate only transform and opacity; prefers-reduced-motion support stays. (9) No scrolling, no overflow; split content into more slides instead of shrinking type; low-density speaker-led decks get one idea per slide with 1-3 bullets, high-density reading-first decks get structured grids with max 4-6 cards.",
"zh-CN": "用 Electric Studio(钴蓝工作室)锁定主题为 {{audience}} 创作一套关于 {{topic}} 的 {{deckType}}({{slideCount}},{{density}}):零依赖单文件 HTML,固定 1920x1080 舞台等比缩放;每页都是「白上 × 钴蓝 #4361ee 下」的上下分割面板,面板接缝 14px 深色 accent bar,四角 brand marks(钴蓝色块 + 字标 / 章节 / 页码),全 Manrope(display 800 紧排印、正文 400/500),引文排印为主视觉,无照片无插画、仅平面色块与排印装饰。从插件内 example.html 种子出发,保留舞台缩放系统、SlidePresentation 导航脚本与 :root token 原样,只替换内容;禁止引入规格外的颜色和字体。完整硬性规格以英文 prompt 为准。"
},
"exampleOutputs": [
{
"path": "./example.html",
"title": "Voltaic Studio - Electric Studio capabilities deck",
"title_i18n": {
"en": "Voltaic Studio - Electric Studio capabilities deck",
"zh-CN": "Voltaic Studio · 钴蓝工作室能力介绍演示"
}
}
]
},
"inputs": [
{
"name": "deckType",
"label": "Deck type",
"type": "select",
"required": true,
"options": [
"studio / agency capabilities deck",
"pitch deck",
"product overview",
"conference talk",
"internal presentation"
],
"default": "studio / agency capabilities deck"
},
{
"name": "topic",
"label": "Topic",
"type": "string",
"required": true,
"placeholder": "Voltaic Studio capabilities 2026",
"default": "the user's brief"
},
{
"name": "audience",
"label": "Audience",
"type": "string",
"required": true,
"placeholder": "Prospective clients evaluating design partners",
"default": "a general professional audience"
},
{
"name": "slideCount",
"label": "Length",
"type": "select",
"required": true,
"options": [
"short 5-10 slides",
"medium 10-20 slides",
"long 20+ slides"
],
"default": "short 5-10 slides"
},
{
"name": "density",
"label": "Density",
"type": "select",
"required": true,
"options": [
"low density / speaker-led",
"high density / reading-first"
],
"default": "low density / speaker-led"
}
],
"context": {
"skills": [
{
"path": "./SKILL.md"
}
],
"assets": [
"./example.html"
]
},
"pipeline": {
"stages": [
{
"id": "discovery",
"atoms": [
"discovery-question-form"
]
},
{
"id": "generate",
"atoms": [
"file-write",
"live-artifact"
]
}
]
},
"capabilities": [
"prompt:inject",
"fs:write"
]
}
}