@ammduncan/easel 0.2.18 → 0.2.19
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/CHANGELOG.md +5 -0
- package/dist/client/viewer.js +12 -0
- package/dist/mcp.js +1 -0
- package/package.json +1 -1
- package/skills/using-easel/SKILL.md +18 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to easel. This project adheres to [Semantic Versioning](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## 0.2.19 — 2026-05-23
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- **`.full-bleed` utility class for mockups embedded mid-presentation.** The common case: a presentation push with prose intro → embedded UI mockup → more prose. Prose should stay in the ~880px reading column, but the mockup should fill the full card width. `kind: "mockup"` can't help (it strips the frame from the whole push, prose included). Now wrapping just the mockup section in `<div class="full-bleed">` breaks it out of the body padding + 1400px prose cap to span the full card width (`width: 100vw; left: 50%; transform: translateX(-50%)` — inside the iframe 100vw === card width), while everything outside the wrapper stays in the reading column. Documented in the skill and the inline `push` tool description. Two cases, two tools: whole-push recreation → `kind: "mockup"`/`"app"`; embedded mockup → `.full-bleed` wrapper.
|
|
9
|
+
|
|
5
10
|
## 0.2.18 — 2026-05-23
|
|
6
11
|
|
|
7
12
|
### Reverted
|
package/dist/client/viewer.js
CHANGED
|
@@ -700,6 +700,18 @@ body > h1, body > h2, body > h3, body > h4 {
|
|
|
700
700
|
}
|
|
701
701
|
body > *:first-child { margin-top: 0 !important; }
|
|
702
702
|
body > *:last-child { margin-bottom: 0 !important; }
|
|
703
|
+
/* Full-bleed escape hatch for embedded mockups mid-presentation. Wrap a
|
|
704
|
+
section in <div class="full-bleed"> and it spans the full card width,
|
|
705
|
+
breaking out of the body padding + 1400px prose max-width, while the prose
|
|
706
|
+
around it stays in the comfortable reading column. Inside the iframe, 100vw
|
|
707
|
+
=== the card's width; left:50% + translateX(-50%) re-centres on the card. */
|
|
708
|
+
.full-bleed {
|
|
709
|
+
width: 100vw;
|
|
710
|
+
position: relative;
|
|
711
|
+
left: 50%;
|
|
712
|
+
transform: translateX(-50%);
|
|
713
|
+
max-width: 100vw;
|
|
714
|
+
}
|
|
703
715
|
.wrap { display: block; }
|
|
704
716
|
.kicker {
|
|
705
717
|
display: block;
|
package/dist/mcp.js
CHANGED
|
@@ -139,6 +139,7 @@ export async function main() {
|
|
|
139
139
|
"═══ LAYOUT ═══\n" +
|
|
140
140
|
"• Stack desktop mockups VERTICALLY with labels ('Now', 'Proposed') — don't squeeze them side-by-side. The iframe is ~900px wide; two desktop screens at half-width crush columns, wrap headings to 3 lines, and turn tables unreadable.\n" +
|
|
141
141
|
"• Side-by-side is fine only for narrow mobile mockups, small cards, or short text columns that genuinely fit in half-width.\n" +
|
|
142
|
+
"• Mockup embedded mid-explanation? Prose has a ~880px reading-width cap, but a mockup section should fill the full card. Wrap JUST the mockup in <div class=\"full-bleed\">…</div> — it breaks out of the body padding + prose cap to span the full card width, while surrounding prose stays in the reading column. (If the WHOLE push is a UI recreation, use kind:'mockup'/'app' instead — that strips the entire frame.)\n" +
|
|
142
143
|
"• One accent color, 3–4 instances max per card. Status colors (red/amber/green) only when state genuinely maps to status.\n\n" +
|
|
143
144
|
"═══ WHEN TO PUSH ═══\n" +
|
|
144
145
|
"A response that would otherwise contain: >2 paragraphs of explanation, any UI mockup, a diagram, a code diff, a ≥3-option comparison, or a multi-step progress view. Do NOT ask permission — push proactively. After pushing, reply in chat with ONE LINE: 'pushed to easel ↗ — #<index>'. Don't restate the card's content.\n\n" +
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ammduncan/easel",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.19",
|
|
4
4
|
"description": "A live browser tab for every Claude Code (and MCP) session. The push MCP tool appends HTML cards to a scrolling feed you keep open in split-screen.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -265,6 +265,24 @@ Good shapes:
|
|
|
265
265
|
|
|
266
266
|
## Built-in helpers
|
|
267
267
|
|
|
268
|
+
### Full-bleed mockups mid-presentation
|
|
269
|
+
|
|
270
|
+
Most mockups appear *inside* an explanation push — prose intro, embedded UI mockup, more prose. The prose should stay in the comfortable reading column, but the mockup should fill the full card width. Wrap just the mockup section in `.full-bleed`:
|
|
271
|
+
|
|
272
|
+
```html
|
|
273
|
+
<p>Here's the proposed auth screen:</p>
|
|
274
|
+
<div class="full-bleed">
|
|
275
|
+
<!-- desktop mockup — spans the full card width, escaping the prose max-width -->
|
|
276
|
+
</div>
|
|
277
|
+
<p>The left panel uses the existing brand assets…</p>
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
`.full-bleed` is injected into every presentation push. It breaks the wrapped element out of the body padding + 1400px prose cap to span the full card width, then everything outside it stays in the reading column. This is the right tool when a mockup is one section of a longer push.
|
|
281
|
+
|
|
282
|
+
Two cases, two tools:
|
|
283
|
+
- **Whole push is a mockup / app recreation** → `kind: "mockup"` (or `"app"`) on the push. Strips the entire presentation frame; content owns the canvas.
|
|
284
|
+
- **Mockup embedded in an explanation** → leave the push as-is and wrap the mockup section in `<div class="full-bleed">`.
|
|
285
|
+
|
|
268
286
|
### Semantic chips
|
|
269
287
|
|
|
270
288
|
```html
|