@aivorynet/slaide 1.0.4 → 1.2.0
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 +38 -1
- package/dist/compiler/chrome.d.ts +5 -1
- package/dist/compiler/chrome.js +51 -5
- package/dist/compiler/chrome.js.map +1 -1
- package/dist/compiler/compile.d.ts +7 -1
- package/dist/compiler/compile.js +94 -6
- package/dist/compiler/compile.js.map +1 -1
- package/dist/compiler/markdown.js +24 -4
- package/dist/compiler/markdown.js.map +1 -1
- package/dist/compiler/unknown-vars.d.ts +16 -0
- package/dist/compiler/unknown-vars.js +134 -0
- package/dist/compiler/unknown-vars.js.map +1 -0
- package/dist/container.js +9 -0
- package/dist/container.js.map +1 -1
- package/dist/export-pptx/embed-fonts.d.ts +1 -0
- package/dist/export-pptx/embed-fonts.js +42 -7
- package/dist/export-pptx/embed-fonts.js.map +1 -1
- package/dist/export-pptx/pptx.js +139 -13
- package/dist/export-pptx/pptx.js.map +1 -1
- package/dist/index.d.ts +10 -2
- package/dist/index.js +26 -2
- package/dist/index.js.map +1 -1
- package/dist/master-io.js +1 -0
- package/dist/master-io.js.map +1 -1
- package/dist/optimize/export-optimize.d.ts +26 -0
- package/dist/optimize/export-optimize.js +104 -5
- package/dist/optimize/export-optimize.js.map +1 -1
- package/dist/parser/parse.js +23 -3
- package/dist/parser/parse.js.map +1 -1
- package/dist/render/anim.js +5 -5
- package/dist/render/anim.js.map +1 -1
- package/dist/render/charts.js +11 -6
- package/dist/render/charts.js.map +1 -1
- package/dist/render/css.js +1 -1
- package/dist/render/html.js +8 -1
- package/dist/render/html.js.map +1 -1
- package/dist/render/runtime.js +42 -20
- package/dist/render/runtime.js.map +1 -1
- package/dist/render-pdf/pdf.js +22 -3
- package/dist/render-pdf/pdf.js.map +1 -1
- package/dist/render-png/montage.js +7 -2
- package/dist/render-png/montage.js.map +1 -1
- package/dist/render-png/shoot.d.ts +6 -0
- package/dist/render-png/shoot.js +20 -7
- package/dist/render-png/shoot.js.map +1 -1
- package/dist/types.d.ts +22 -2
- package/dist/vocab.d.ts +4 -1
- package/dist/vocab.js +10 -4
- package/dist/vocab.js.map +1 -1
- package/package.json +1 -1
- package/skills/slaide/SKILL.md +1 -1
- package/skills/slaide/grammar.md +2 -1
- package/skills/slaide/reference.md +7 -3
- package/skills/slaide/themes.md +16 -2
- package/themes/blank.slaide.yaml +62 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"charts.js","sourceRoot":"","sources":["../../src/render/charts.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,sCAAsC;AACtC,kFAAkF;AAClF,EAAE;AACF,yFAAyF;AACzF,yFAAyF;AACzF,0FAA0F;AAC1F,wFAAwF;AACxF,yFAAyF;AACzF,oDAAoD;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,oFAAoF;AACpF,mEAAmE;AACnE,uFAAuF;AACvF,iEAAiE;AACjE,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"charts.js","sourceRoot":"","sources":["../../src/render/charts.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,sCAAsC;AACtC,kFAAkF;AAClF,EAAE;AACF,yFAAyF;AACzF,yFAAyF;AACzF,0FAA0F;AAC1F,wFAAwF;AACxF,yFAAyF;AACzF,oDAAoD;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,oFAAoF;AACpF,mEAAmE;AACnE,uFAAuF;AACvF,iEAAiE;AACjE,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8JvC,CAAC"}
|
package/dist/render/css.js
CHANGED
|
@@ -173,7 +173,7 @@ body.sl-presenting .sl-stage,body.slv-presenting .sl-stage{box-shadow:none;}
|
|
|
173
173
|
.sl-progress{position:fixed;left:0;bottom:0;height:3px;background:var(--color-accent,#6cf);width:0;z-index:50;transition:width .3s ease;}
|
|
174
174
|
.sl-counter{position:fixed;right:14px;bottom:12px;font:600 13px/1 var(--font-sans,system-ui);color:#fff;opacity:.35;z-index:50;background:rgba(0,0,0,.3);padding:5px 9px;border-radius:20px;backdrop-filter:blur(6px);}
|
|
175
175
|
.sl-counter:hover{opacity:.8;}
|
|
176
|
-
.sl-notes{position:fixed;left:var(--
|
|
176
|
+
.sl-notes{position:fixed;left:var(--slaide--dock-left,0px);right:var(--slaide--dock-right,0px);bottom:var(--slaide--dock-bottom,0px);height:180px;overflow:auto;background:rgba(10,10,16,.94);color:#ddd;padding:16px 22px;font:15px/1.6 var(--font-sans,system-ui);z-index:60;border-top:2px solid var(--color-accent,#6cf);display:none;box-sizing:border-box;}
|
|
177
177
|
.sl-notes.sl-open{display:block;}
|
|
178
178
|
.sl-help{position:fixed;inset:0;display:none;place-items:center;background:rgba(5,5,10,.82);z-index:70;}
|
|
179
179
|
.sl-help.sl-open{display:grid;}
|
package/dist/render/html.js
CHANGED
|
@@ -9,6 +9,9 @@ function backgroundCss(bg) {
|
|
|
9
9
|
if (bg.type === 'solid')
|
|
10
10
|
return `background:${bg.color};`;
|
|
11
11
|
if (bg.type === 'gradient') {
|
|
12
|
+
// Model-authored masters can ship a gradient without `stops` — degrade, never crash.
|
|
13
|
+
if (!Array.isArray(bg.stops) || bg.stops.length === 0)
|
|
14
|
+
return '';
|
|
12
15
|
const angle = bg.angle ?? 135;
|
|
13
16
|
return `background:linear-gradient(${angle}deg, ${bg.stops.join(', ')});`;
|
|
14
17
|
}
|
|
@@ -77,7 +80,11 @@ function renderSlideWeb(slide) {
|
|
|
77
80
|
`</section>`);
|
|
78
81
|
}
|
|
79
82
|
function renderSlidePrint(slide) {
|
|
80
|
-
|
|
83
|
+
// Print is the PDF source: every page rasterises, so lazy images on later pages
|
|
84
|
+
// would never load and export blank. Load them all eagerly (web does this for
|
|
85
|
+
// slide 0 only — see renderSlideWeb).
|
|
86
|
+
const body = renderLayers(slide, true).replace(/loading="lazy"/g, 'loading="eager"');
|
|
87
|
+
return `<div class="sl-page sl-slide" style="${cssVars(slide.vars)}">${body}</div>`;
|
|
81
88
|
}
|
|
82
89
|
function cssVars(vars) {
|
|
83
90
|
return serializeStyle(vars);
|
package/dist/render/html.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/render/html.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/render/html.ts"],"names":[],"mappings":"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"}
|
package/dist/render/runtime.js
CHANGED
|
@@ -7,10 +7,12 @@ export const RUNTIME_JS = String.raw `
|
|
|
7
7
|
var stage = document.querySelector('.sl-stage');
|
|
8
8
|
if(!stage) return;
|
|
9
9
|
var vp = document.querySelector('.sl-viewport');
|
|
10
|
-
|
|
10
|
+
// Scope to the stage: a host (web editor) may clone .sl-slide into a filmstrip elsewhere in the
|
|
11
|
+
// document; collecting from the whole document would pollute the count/index and navigation.
|
|
12
|
+
var slides = Array.prototype.slice.call(stage.querySelectorAll('.sl-slide'));
|
|
11
13
|
var CW = parseFloat(stage.dataset.w)||1280, CH = parseFloat(stage.dataset.h)||720;
|
|
12
14
|
var notes = (window.__SLAIDE_NOTES__)||[];
|
|
13
|
-
var cur = 0, step = 0, busy = false;
|
|
15
|
+
var cur = 0, step = 0, busy = false, pendingNav = null;
|
|
14
16
|
var zoomFactor = 1, panX = 0, panY = 0;
|
|
15
17
|
// When false, taps don't advance and drag-pan is off (for interactive embeds,
|
|
16
18
|
// kiosk mode, or a host that drives navigation itself). Default: on.
|
|
@@ -44,11 +46,11 @@ export const RUNTIME_JS = String.raw `
|
|
|
44
46
|
function scale(){
|
|
45
47
|
var pres = isPresenting();
|
|
46
48
|
var cs = getComputedStyle(document.documentElement);
|
|
47
|
-
var dl = pres ? 0 : cssVar(cs,'--
|
|
48
|
-
var dt = pres ? 0 : cssVar(cs,'--
|
|
49
|
+
var dl = pres ? 0 : cssVar(cs,'--slaide--dock-left'), dr = pres ? 0 : cssVar(cs,'--slaide--dock-right');
|
|
50
|
+
var dt = pres ? 0 : cssVar(cs,'--slaide--dock-top');
|
|
49
51
|
// Bottom dock = chrome dock (bstrip/filmstrip, absolute) + notes reservation (independent), so
|
|
50
|
-
// the two writers never clobber each other. .sl-notes sits at --
|
|
51
|
-
var db = pres ? 0 : cssVar(cs,'--
|
|
52
|
+
// the two writers never clobber each other. .sl-notes sits at --slaide--dock-bottom (above the chrome).
|
|
53
|
+
var db = pres ? 0 : cssVar(cs,'--slaide--dock-bottom') + cssVar(cs,'--slaide--dock-notes');
|
|
52
54
|
var vw = window.innerWidth - dl - dr, vh = window.innerHeight - dt - db;
|
|
53
55
|
var fit = Math.min(vw/CW, vh/CH);
|
|
54
56
|
var s = fit * zoomFactor;
|
|
@@ -118,24 +120,28 @@ export const RUNTIME_JS = String.raw `
|
|
|
118
120
|
if(dir<0){ newSlide.classList.add('sl-anim-rev'); oldSlide.classList.add('sl-anim-rev'); }
|
|
119
121
|
step = dir<0 ? buildCount(i) : 0; applyBuilds(newSlide, step);
|
|
120
122
|
var done=0;
|
|
121
|
-
function endOld(){ oldSlide.classList.remove('sl-active', outC, 'sl-anim-rev'); oldSlide.removeEventListener('animationend', endOld);
|
|
122
|
-
function endNew(){ newSlide.classList.remove(inC, 'sl-anim-rev'); newSlide.removeEventListener('animationend', endNew);
|
|
123
|
-
function
|
|
123
|
+
function endOld(){ if(done&1) return; done|=1; oldSlide.classList.remove('sl-active', outC, 'sl-anim-rev'); oldSlide.removeEventListener('animationend', endOld); fin(); }
|
|
124
|
+
function endNew(){ if(done&2) return; done|=2; newSlide.classList.remove(inC, 'sl-anim-rev'); newSlide.removeEventListener('animationend', endNew); fin(); }
|
|
125
|
+
function fin(){ if((done&3)===3){ busy=false; if(pendingNav){ var p=pendingNav; pendingNav=null; if(p==='fwd') forward(); else backward(); } } }
|
|
124
126
|
oldSlide.addEventListener('animationend', endOld);
|
|
125
127
|
newSlide.addEventListener('animationend', endNew);
|
|
126
|
-
|
|
127
|
-
|
|
128
|
+
requestAnimationFrame(function(){
|
|
129
|
+
var cs1=getComputedStyle(oldSlide),cs2=getComputedStyle(newSlide);
|
|
130
|
+
if(!cs1.animationName||cs1.animationName==='none'||cs1.animationDuration==='0s') endOld();
|
|
131
|
+
if(!cs2.animationName||cs2.animationName==='none'||cs2.animationDuration==='0s') endNew();
|
|
132
|
+
});
|
|
133
|
+
setTimeout(function(){ if(busy){ endOld(); endNew(); } }, 800);
|
|
128
134
|
cur=i; updateChrome(); sync();
|
|
129
135
|
}
|
|
130
136
|
|
|
131
137
|
function forward(){
|
|
132
|
-
if(busy) return;
|
|
138
|
+
if(busy){ pendingNav='fwd'; return; }
|
|
133
139
|
if(blanked) blank('');
|
|
134
140
|
if(step < buildCount(cur)){ step++; applyBuilds(slides[cur], step); updateChrome(); sync(); return; }
|
|
135
141
|
goTo(cur+1, 1);
|
|
136
142
|
}
|
|
137
143
|
function backward(){
|
|
138
|
-
if(busy) return;
|
|
144
|
+
if(busy){ pendingNav='bwd'; return; }
|
|
139
145
|
if(blanked) blank('');
|
|
140
146
|
if(step > 0){ step--; applyBuilds(slides[cur], step); updateChrome(); sync(); return; }
|
|
141
147
|
goTo(cur-1, -1);
|
|
@@ -144,17 +150,17 @@ export const RUNTIME_JS = String.raw `
|
|
|
144
150
|
function toggle(sel){ var e=document.querySelector(sel); if(e) e.classList.toggle('sl-open'); updateChrome(); }
|
|
145
151
|
var NOTES_H = 180;
|
|
146
152
|
// Dock the notes panel BENEATH the slide (not floating over it). The panel is a fixed sibling;
|
|
147
|
-
// it reserves its own space via the INDEPENDENT --
|
|
148
|
-
// scale()), and anchors at --
|
|
149
|
-
// filmstrip, or nothing). Keeping notes' reservation separate from --
|
|
153
|
+
// it reserves its own space via the INDEPENDENT --slaide--dock-notes var (summed into the stage fit by
|
|
154
|
+
// scale()), and anchors at --slaide--dock-bottom so it sits flush above the chrome dock (the editor
|
|
155
|
+
// filmstrip, or nothing). Keeping notes' reservation separate from --slaide--dock-bottom means the
|
|
150
156
|
// bstrip's absolute writes and the notes' toggle never clobber each other (no overlap on toggle).
|
|
151
157
|
function setNotesOpen(open){
|
|
152
158
|
var np = document.querySelector('.sl-notes');
|
|
153
159
|
if(!np) return;
|
|
154
160
|
if(open === np.classList.contains('sl-open')) return; // already in the requested state
|
|
155
161
|
var ds = document.documentElement.style;
|
|
156
|
-
if(open){ np.classList.add('sl-open'); ds.setProperty('--
|
|
157
|
-
else { np.classList.remove('sl-open'); ds.setProperty('--
|
|
162
|
+
if(open){ np.classList.add('sl-open'); ds.setProperty('--slaide--dock-notes', NOTES_H + 'px'); }
|
|
163
|
+
else { np.classList.remove('sl-open'); ds.setProperty('--slaide--dock-notes', '0px'); }
|
|
158
164
|
// innerHTML is populated by the updateChrome() call below (it fills .sl-notes when open).
|
|
159
165
|
scale();
|
|
160
166
|
updateChrome();
|
|
@@ -322,7 +328,9 @@ export const RUNTIME_JS = String.raw `
|
|
|
322
328
|
case 'Escape':
|
|
323
329
|
// Close any open overlay (help, etc.) directly; notes go through setNotesOpen so the
|
|
324
330
|
// reserved bottom dock unwinds too. (Loop param is el; the outer e is the KeyboardEvent.)
|
|
325
|
-
|
|
331
|
+
// A host surface (e.g. an editor pane) marks itself data-sl-pin to opt OUT of Esc-close —
|
|
332
|
+
// it owns its own lifecycle; the runtime knows nothing about what it is.
|
|
333
|
+
document.querySelectorAll('.sl-open').forEach(function(el){ if(!el.classList.contains('sl-notes') && !el.hasAttribute('data-sl-pin')) el.classList.remove('sl-open'); });
|
|
326
334
|
setNotesOpen(false);
|
|
327
335
|
break;
|
|
328
336
|
}
|
|
@@ -384,7 +392,20 @@ export const RUNTIME_JS = String.raw `
|
|
|
384
392
|
prev: backward,
|
|
385
393
|
goTo: function(i){ goTo(i, i>cur?1:-1); },
|
|
386
394
|
relayout: function(){ scale(); }, // recompute the stage fit (e.g. after the dock opens/closes)
|
|
387
|
-
show: function(i){ if(
|
|
395
|
+
show: function(i){ if(!slides.length) return; i=Math.max(0,Math.min(slides.length-1,i)); activate(i, true); cur=i; updateChrome(); },
|
|
396
|
+
// Re-collect slides after the host appended/replaced .sl-slide nodes in the stage (live agent
|
|
397
|
+
// build: new slides stream in one by one). Preserve the current index; re-assert active + builds
|
|
398
|
+
// + chrome. Returns the new slide count.
|
|
399
|
+
rescan: function(){
|
|
400
|
+
slides = Array.prototype.slice.call(stage.querySelectorAll(':scope > .sl-slide'));
|
|
401
|
+
if(!slides.length) return 0;
|
|
402
|
+
cur = Math.max(0, Math.min(cur, slides.length-1));
|
|
403
|
+
slides.forEach(function(s,idx){ s.classList.toggle('sl-active', idx===cur); });
|
|
404
|
+
if(step > buildCount(cur)) step = buildCount(cur);
|
|
405
|
+
applyBuilds(slides[cur], step);
|
|
406
|
+
scale(); updateChrome();
|
|
407
|
+
return slides.length;
|
|
408
|
+
},
|
|
388
409
|
setInteractive: function(on){ navEnabled = on!==false; },
|
|
389
410
|
toggleNotes: function(){ toggleNotes(); },
|
|
390
411
|
toggleHelp: function(){ toggle('.sl-help'); },
|
|
@@ -415,6 +436,7 @@ export const RUNTIME_JS = String.raw `
|
|
|
415
436
|
scale(); updateChrome();
|
|
416
437
|
if(AM_PRESENTER) buildPresenter(); // this window is the presenter view
|
|
417
438
|
if(AM_AUDIENCE){ document.body.classList.add('slv-presenting'); navEnabled = false; } // clean mirror, host-driven
|
|
439
|
+
if(document.body.classList.contains('sl-editing')) navEnabled = false;
|
|
418
440
|
})();
|
|
419
441
|
`;
|
|
420
442
|
//# sourceMappingURL=runtime.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/render/runtime.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,sCAAsC;AACtC,8EAA8E;AAC9E,uFAAuF;AACvF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/render/runtime.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,sCAAsC;AACtC,8EAA8E;AAC9E,uFAAuF;AACvF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAobnC,CAAC"}
|
package/dist/render-pdf/pdf.js
CHANGED
|
@@ -28,11 +28,30 @@ export async function renderPdfFromHtml(html, out, canvas, injected) {
|
|
|
28
28
|
await page.setContent(html, { waitUntil: 'networkidle' });
|
|
29
29
|
// Ensure web fonts are ready before printing.
|
|
30
30
|
await page.evaluate(() => document.fonts?.ready);
|
|
31
|
-
//
|
|
32
|
-
|
|
31
|
+
// Ensure every image has finished loading (or failed) before printing — print mode marks
|
|
32
|
+
// them eager (see renderSlidePrint), but 'networkidle' can fire while decodes/late fetches
|
|
33
|
+
// are still in flight. Capped at 15s so one dead URL cannot hang the export.
|
|
33
34
|
await page
|
|
34
|
-
.
|
|
35
|
+
.evaluate(() => {
|
|
36
|
+
const pending = Array.from(document.images)
|
|
37
|
+
.filter((im) => !im.complete)
|
|
38
|
+
.map((im) => new Promise((res) => {
|
|
39
|
+
im.addEventListener('load', () => res(), { once: true });
|
|
40
|
+
im.addEventListener('error', () => res(), { once: true });
|
|
41
|
+
}));
|
|
42
|
+
if (!pending.length)
|
|
43
|
+
return;
|
|
44
|
+
return Promise.race([Promise.all(pending).then(() => undefined), new Promise((res) => setTimeout(res, 15000))]);
|
|
45
|
+
})
|
|
35
46
|
.catch(() => { });
|
|
47
|
+
// Render charts (lazy) and wait until they settle so they appear in the PDF. Gated on the
|
|
48
|
+
// chart-lib signal + 3-arg waitForFunction form — see render-png/shoot.ts's shootHtml.
|
|
49
|
+
if (html.includes('id="sl-mermaid-lib"') || html.includes('id="sl-echart-lib"')) {
|
|
50
|
+
await page.evaluate(() => window.__slaideCharts?.renderAll());
|
|
51
|
+
await page
|
|
52
|
+
.waitForFunction(() => window.__slaideChartsReady === true, undefined, { timeout: 8000 })
|
|
53
|
+
.catch(() => { });
|
|
54
|
+
}
|
|
36
55
|
await page.pdf({
|
|
37
56
|
path: out,
|
|
38
57
|
preferCSSPageSize: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../src/render-pdf/pdf.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,sCAAsC;AACtC,6EAA6E;AAC7E,+EAA+E;AAC/E,8CAA8C;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAO7C,KAAK,UAAU,cAAc;IAC3B,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,4CAA4C;YAC1C,4BAA4B;YAC5B,mCAAmC,CACtC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAY,EACZ,GAAW,EACX,MAA0C,EAC1C,QAAuC;IAEvC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,cAAc,EAAE,CAAC;IAC5C,wFAAwF;IACxF,iFAAiF;IACjF,MAAM,OAAO,GAAG,QAAQ,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,qFAAqF;QACrF,6EAA6E;QAC7E,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAChC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAC3E,CAAC;QACF,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;QAC1D,8CAA8C;QAC9C,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAE,QAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1D,6EAA6E;QAC7E,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAE,MAAc,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../src/render-pdf/pdf.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,sCAAsC;AACtC,6EAA6E;AAC7E,+EAA+E;AAC/E,8CAA8C;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAO7C,KAAK,UAAU,cAAc;IAC3B,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,4CAA4C;YAC1C,4BAA4B;YAC5B,mCAAmC,CACtC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAY,EACZ,GAAW,EACX,MAA0C,EAC1C,QAAuC;IAEvC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,cAAc,EAAE,CAAC;IAC5C,wFAAwF;IACxF,iFAAiF;IACjF,MAAM,OAAO,GAAG,QAAQ,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,qFAAqF;QACrF,6EAA6E;QAC7E,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAChC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAC3E,CAAC;QACF,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;QAC1D,8CAA8C;QAC9C,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAE,QAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1D,yFAAyF;QACzF,2FAA2F;QAC3F,6EAA6E;QAC7E,MAAM,IAAI;aACP,QAAQ,CAAC,GAAG,EAAE;YACb,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;iBACxC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;iBAC5B,GAAG,CACF,CAAC,EAAE,EAAE,EAAE,CACL,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,EAAE;gBACxB,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzD,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,CAAC,CAAC,CACL,CAAC;YACJ,IAAI,CAAC,OAAO,CAAC,MAAM;gBAAE,OAAO;YAC5B,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxH,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACnB,0FAA0F;QAC1F,uFAAuF;QACvF,IAAI,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAChF,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAE,MAAc,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;YACvE,MAAM,IAAI;iBACP,eAAe,CAAC,GAAG,EAAE,CAAE,MAAc,CAAC,mBAAmB,KAAK,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;iBACjG,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACrB,CAAC;QACD,MAAM,IAAI,CAAC,GAAG,CAAC;YACb,IAAI,EAAE,GAAG;YACT,iBAAiB,EAAE,IAAI;YACvB,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,QAAQ;YAAE,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACvC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,IAAgB;IAChE,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACzG,OAAO,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -32,8 +32,13 @@ export async function montageDeck(deckPath, opts = {}) {
|
|
|
32
32
|
const doc = html.replace('</head>', '<style>.sl-counter,.sl-progress,.sl-notes,.sl-help,.sl-present-toggle{display:none !important;}</style></head>');
|
|
33
33
|
await page.setContent(doc, { waitUntil: 'networkidle' });
|
|
34
34
|
await page.evaluate(() => document.fonts?.ready);
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
// See render-png/shoot.ts's shootHtml: gated on the same chart-lib signal (chart-free decks
|
|
36
|
+
// never define window.__slaideCharts, so the wait would just burn the timeout for nothing),
|
|
37
|
+
// and the 3-arg waitForFunction form (the 2-arg form silently drops the 8000ms cap).
|
|
38
|
+
if (doc.includes('id="sl-mermaid-lib"') || doc.includes('id="sl-echart-lib"')) {
|
|
39
|
+
await page.evaluate(() => window.__slaideCharts?.renderAll());
|
|
40
|
+
await page.waitForFunction(() => window.__slaideChartsReady === true, undefined, { timeout: 8000 }).catch(() => { });
|
|
41
|
+
}
|
|
37
42
|
await page.waitForTimeout(400);
|
|
38
43
|
// Capture each slide (builds settled) as a light JPEG, then tile + encode in one canvas.
|
|
39
44
|
const shots = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"montage.js","sourceRoot":"","sources":["../../src/render-png/montage.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,sCAAsC;AACtC,8FAA8F;AAC9F,+FAA+F;AAC/F,+FAA+F;AAC/F,gGAAgG;AAChG,gCAAgC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAW7C,KAAK,UAAU,cAAc;IAC3B,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,oGAAoG,CAAC,CAAC;IACxH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAgB,EAChB,OAAuB,EAAE;IAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,iBAAiB,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC;IACpC,MAAM,GAAG,GAAG,CAAC,CAAC;IACd,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IAE/D,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpG,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,cAAc,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7H,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CACtB,SAAS,EACT,gHAAgH,CACjH,CAAC;QACF,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;QACzD,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAE,QAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1D,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAE,MAAc,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"montage.js","sourceRoot":"","sources":["../../src/render-png/montage.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,12 @@ export interface ShootOptions {
|
|
|
18
18
|
/** A pooled Chromium browser to reuse (engine-service). When set it is NOT closed here;
|
|
19
19
|
* when omitted, a throwaway browser is launched and closed for this call (CLI path). */
|
|
20
20
|
browser?: import('playwright').Browser;
|
|
21
|
+
/** Capture only this 0-based slide index instead of every slide in the deck — the
|
|
22
|
+
* single-slide "look" fast path (engine-server's shootSlide). Page setup / networkidle /
|
|
23
|
+
* font / chart-settle waits still run once as before; only the per-slide show+screenshot
|
|
24
|
+
* loop is trimmed to one iteration. Returns a single-element array, so callers that don't
|
|
25
|
+
* set this (montage, CLI `shoot`) are completely unaffected. */
|
|
26
|
+
only?: number;
|
|
21
27
|
}
|
|
22
28
|
/** Render a self-contained web-deck HTML + its IR to per-slide PNGs (builds settled). */
|
|
23
29
|
export declare function shootHtml(html: string, ir: DeckIR, opts?: ShootOptions): Promise<string[]>;
|
package/dist/render-png/shoot.js
CHANGED
|
@@ -36,6 +36,9 @@ export async function shootHtml(html, ir, opts = {}) {
|
|
|
36
36
|
const tag = opts.tag ?? 'slide';
|
|
37
37
|
const fmt = opts.format ?? 'png';
|
|
38
38
|
const quality = Math.max(1, Math.min(100, opts.quality ?? 82));
|
|
39
|
+
if (opts.only != null && (opts.only < 0 || opts.only >= ir.slides.length)) {
|
|
40
|
+
throw new Error(`shoot: slide ${opts.only} out of range (deck has ${ir.slides.length})`);
|
|
41
|
+
}
|
|
39
42
|
mkdirSync(outDir, { recursive: true });
|
|
40
43
|
const { chromium } = await loadPlaywright();
|
|
41
44
|
const browser = opts.browser ?? (await chromium.launch());
|
|
@@ -47,15 +50,25 @@ export async function shootHtml(html, ir, opts = {}) {
|
|
|
47
50
|
}
|
|
48
51
|
await page.setContent(doc, { waitUntil: 'networkidle' });
|
|
49
52
|
await page.evaluate(() => document.fonts?.ready);
|
|
50
|
-
// Render all charts (lazy in the runtime) and wait until they settle so every
|
|
51
|
-
//
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
// Render all charts (lazy in the runtime) and wait until they settle so every captured
|
|
54
|
+
// frame includes them. Chart-free decks never get the boot script at all (html.ts's
|
|
55
|
+
// chartBlock omits it when there's no mermaid/echart markup), so window.__slaideCharts
|
|
56
|
+
// stays undefined and the ready flag never flips — gate on the same signal so those decks
|
|
57
|
+
// skip the wait instead of always burning it for nothing (this was the dominant fixed cost
|
|
58
|
+
// of every shoot/montage call). Also note the 3-arg form: waitForFunction(fn, arg, options) —
|
|
59
|
+
// passing options positionally as `arg` (the old 2-arg call) is silently accepted, so the
|
|
60
|
+
// "8000ms" cap never took effect and every wait ran out Playwright's real default instead.
|
|
61
|
+
const hasCharts = doc.includes('id="sl-mermaid-lib"') || doc.includes('id="sl-echart-lib"');
|
|
62
|
+
if (hasCharts) {
|
|
63
|
+
await page.evaluate(() => window.__slaideCharts?.renderAll());
|
|
64
|
+
await page
|
|
65
|
+
.waitForFunction(() => window.__slaideChartsReady === true, undefined, { timeout: 8000 })
|
|
66
|
+
.catch(() => { });
|
|
67
|
+
}
|
|
56
68
|
await page.waitForTimeout(400);
|
|
57
69
|
const paths = [];
|
|
58
|
-
|
|
70
|
+
const indices = opts.only != null ? [opts.only] : ir.slides.map((_, i) => i);
|
|
71
|
+
for (const i of indices) {
|
|
59
72
|
// window.slaide.show(n) reveals slide n with every build settled (shown).
|
|
60
73
|
await page.evaluate((n) => window.slaide.show(n), i);
|
|
61
74
|
await page.waitForTimeout(180);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shoot.js","sourceRoot":"","sources":["../../src/render-png/shoot.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,sCAAsC;AACtC,gFAAgF;AAChF,iFAAiF;AACjF,+EAA+E;AAC/E,mFAAmF;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"shoot.js","sourceRoot":"","sources":["../../src/render-png/shoot.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -78,15 +78,35 @@ export interface ChromeBand {
|
|
|
78
78
|
export interface ChromeDef {
|
|
79
79
|
header?: ChromeBand;
|
|
80
80
|
footer?: ChromeBand;
|
|
81
|
-
/** Raw inline SVG
|
|
82
|
-
|
|
81
|
+
/** Raw inline SVG/HTML/URL for a logo mark. A single string is used on every slide
|
|
82
|
+
* (unchanged); `{ dark, light }` picks per slide by its resolved ground — `dark` = the
|
|
83
|
+
* mark legible ON a dark background, `light` = ON a light background. Given only one
|
|
84
|
+
* key, that mark is used on every slide regardless of ground. */
|
|
85
|
+
logo?: string | {
|
|
86
|
+
dark?: string;
|
|
87
|
+
light?: string;
|
|
88
|
+
};
|
|
83
89
|
/** Logo corner: top-left | top-right | bottom-left | bottom-right. */
|
|
84
90
|
logoPos?: string;
|
|
85
91
|
}
|
|
92
|
+
/** Brand identity metadata a deck is branded for. The master's own `colors:`/`fonts:` ARE
|
|
93
|
+
* the brand (no separate palette/fonts copy here — that duplication was a mistake); this
|
|
94
|
+
* block just names/locks it. Set/overridden by the user only — the hosted agent treats a
|
|
95
|
+
* `locked` brand as read-only while it works. */
|
|
96
|
+
export interface MasterBrand {
|
|
97
|
+
/** Brand / company name this deck is branded for. */
|
|
98
|
+
name?: string;
|
|
99
|
+
/** Brand logo: raw inline SVG/HTML mark or an asset reference. */
|
|
100
|
+
logo?: string;
|
|
101
|
+
/** When true the AI must not alter this block mid-run; the user can still override it. */
|
|
102
|
+
locked?: boolean;
|
|
103
|
+
}
|
|
86
104
|
export interface Master {
|
|
87
105
|
schema?: string;
|
|
88
106
|
name: string;
|
|
89
107
|
description?: string;
|
|
108
|
+
/** Immutable brand identity (see MasterBrand). Metadata + lock; roles still drive the CSS. */
|
|
109
|
+
brand?: MasterBrand;
|
|
90
110
|
canvas?: {
|
|
91
111
|
aspect?: string;
|
|
92
112
|
width?: number;
|
package/dist/vocab.d.ts
CHANGED
|
@@ -32,5 +32,8 @@ export declare const SLOT_TYPES: readonly string[];
|
|
|
32
32
|
* literals across the parser/compiler; the lint scrapes src to keep this exhaustive. */
|
|
33
33
|
export declare const DIAGNOSTIC_CODES: readonly string[];
|
|
34
34
|
/** Diagnostics that are hard errors (`ok:false`); every other code is a warning.
|
|
35
|
-
* Canonical here so `index.ts` and the docs share one definition.
|
|
35
|
+
* Canonical here so `index.ts` and the docs share one definition. `unknown-slot` is an
|
|
36
|
+
* error (not a warning): a region routed to a slot its resolved layout doesn't define
|
|
37
|
+
* silently drops the content, so a `deck_source` write with a bad slot name must be
|
|
38
|
+
* rejected rather than reporting ok:true on a semantic no-op. */
|
|
36
39
|
export declare const ERROR_SEVERITY_CODES: ReadonlySet<string>;
|
package/dist/vocab.js
CHANGED
|
@@ -58,12 +58,15 @@ export const SLOT_TYPES = ['title', 'subtitle', 'body', 'image', 'media', 'quote
|
|
|
58
58
|
* literals across the parser/compiler; the lint scrapes src to keep this exhaustive. */
|
|
59
59
|
export const DIAGNOSTIC_CODES = [
|
|
60
60
|
// parser/parse.ts
|
|
61
|
-
'bad-config', 'no-headmatter', 'ambiguous-frontmatter', 'empty-deck',
|
|
61
|
+
'bad-config', 'no-headmatter', 'ambiguous-frontmatter', 'empty-deck', 'bad-region',
|
|
62
62
|
// compiler/compile.ts
|
|
63
63
|
'unknown-color', 'unknown-gradient', 'bad-animation', 'unknown-layout',
|
|
64
64
|
'unknown-transition', 'unknown-background', 'unknown-slot', 'low-contrast',
|
|
65
|
+
'overlapping-slots',
|
|
66
|
+
// compiler/unknown-vars.ts
|
|
67
|
+
'unknown-var',
|
|
65
68
|
// compiler/markdown.ts
|
|
66
|
-
'unknown-class', 'unknown-entrance', 'stray-build', 'bad-chart',
|
|
69
|
+
'unknown-class', 'unknown-entrance', 'stray-build', 'bad-chart', 'bad-span',
|
|
67
70
|
// compiler/tokens.ts
|
|
68
71
|
'unknown-token', 'token-cycle', 'non-embeddable-font', 'unknown-variant',
|
|
69
72
|
// compiler/chrome.ts
|
|
@@ -72,6 +75,9 @@ export const DIAGNOSTIC_CODES = [
|
|
|
72
75
|
'no-master', 'parse-error',
|
|
73
76
|
];
|
|
74
77
|
/** Diagnostics that are hard errors (`ok:false`); every other code is a warning.
|
|
75
|
-
* Canonical here so `index.ts` and the docs share one definition.
|
|
76
|
-
|
|
78
|
+
* Canonical here so `index.ts` and the docs share one definition. `unknown-slot` is an
|
|
79
|
+
* error (not a warning): a region routed to a slot its resolved layout doesn't define
|
|
80
|
+
* silently drops the content, so a `deck_source` write with a bad slot name must be
|
|
81
|
+
* rejected rather than reporting ok:true on a semantic no-op. */
|
|
82
|
+
export const ERROR_SEVERITY_CODES = new Set(['empty-deck', 'no-master', 'unknown-layout', 'unknown-slot']);
|
|
77
83
|
//# sourceMappingURL=vocab.js.map
|
package/dist/vocab.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vocab.js","sourceRoot":"","sources":["../src/vocab.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,sCAAsC;AACtC,EAAE;AACF,4EAA4E;AAC5E,EAAE;AACF,iFAAiF;AACjF,mFAAmF;AACnF,+EAA+E;AAC/E,uFAAuF;AACvF,wFAAwF;AACxF,qFAAqF;AACrF,uFAAuF;AACvF,qFAAqF;AACrF,uEAAuE;AACvE,EAAE;AACF,kFAAkF;AAClF,uFAAuF;AACvF,gEAAgE;AAEhE,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,sFAAsF;AACtF,MAAM,CAAC,MAAM,WAAW,GAAsB,sBAAsB,CAAC;AAErE,gGAAgG;AAChG,MAAM,CAAC,MAAM,SAAS,GAAsB,cAAc,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B;iFACiF;AACjF,MAAM,CAAC,MAAM,gBAAgB,GAAsB,CAAC,GAAG,gBAAgB,CAAC,CAAC;AAEzE;;qDAEqD;AACrD,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACxD,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB;IAC1D,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO;CACtE,CAAC;AAEF,wFAAwF;AACxF,MAAM,CAAC,MAAM,eAAe,GAAsB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAE3H,yFAAyF;AACzF,MAAM,CAAC,MAAM,iBAAiB,GAAsB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAE5E,qFAAqF;AACrF,MAAM,CAAC,MAAM,iBAAiB,GAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAE9E,6FAA6F;AAC7F,MAAM,CAAC,MAAM,kBAAkB,GAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAElF,yGAAyG;AACzG,MAAM,CAAC,MAAM,iBAAiB,GAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAEpG,qIAAqI;AACrI,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ;CAChG,CAAC;AAEF;qDACqD;AACrD,MAAM,CAAC,MAAM,eAAe,GAAsB,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAE/F,uGAAuG;AACvG,MAAM,CAAC,MAAM,UAAU,GAAsB,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAEjH;yFACyF;AACzF,MAAM,CAAC,MAAM,gBAAgB,GAAsB;IACjD,kBAAkB;IAClB,YAAY,EAAE,eAAe,EAAE,uBAAuB,EAAE,YAAY;
|
|
1
|
+
{"version":3,"file":"vocab.js","sourceRoot":"","sources":["../src/vocab.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/skills/slaide/SKILL.md
CHANGED
|
@@ -48,7 +48,7 @@ layout: title-content
|
|
|
48
48
|
- Charts: ` ```echart ` (data viz, ECharts option as JSON) and ` ```mermaid ` (diagrams) → theme-coloured SVG. Put a chart in a slot with height (a `1fr` row).
|
|
49
49
|
|
|
50
50
|
## The master (theme)
|
|
51
|
-
Use the bundled theme — omit `master:` or set `master: aurora` — or author your own (preferred for branded decks). **Read `themes.md` for the format before writing one**: fonts, a type scale, two-tier colour (palette + roles), gradients, backgrounds, grid layouts, chrome — all data. Reference **roles, not hex**, so a reskin is a palette swap. Past "tidy", give the deck **one signature** (a
|
|
51
|
+
Use the bundled theme — omit `master:` or set `master: aurora` — or author your own (preferred for branded decks). **Read `themes.md` for the format before writing one**: fonts, a type scale, two-tier colour (palette + roles), gradients, backgrounds, grid layouts, chrome — all data. Reference **roles, not hex**, so a reskin is a palette swap. Past "tidy", give the deck **one signature** (a recurring accent panel, a distinctive layout rhythm, or a colour-block motif) and vary composition slide to slide. Chrome `logo:` is opt-in — only add it when the user supplies a real brand logo; do NOT invent a generic icon. The load-bearing footguns — dark-on-dark text, hollow `box:` cards, chrome-corner collisions — are flagged in `themes.md`; heed them. A deck about slaide itself: use the shipped brand in the sibling `slaide-hugo` repo, don't invent one.
|
|
52
52
|
|
|
53
53
|
## Commands (prefix `npx @aivorynet/slaide`)
|
|
54
54
|
| Command | Does |
|
package/skills/slaide/grammar.md
CHANGED
|
@@ -64,6 +64,7 @@ content-line = markdown-line ; (* CommonMark, with §5–§7
|
|
|
64
64
|
```
|
|
65
65
|
|
|
66
66
|
- `region-marker` routes following content into the named slot until the next marker or separator. Content before any marker → the layout's main slot.
|
|
67
|
+
- A line starting `::` that is **not** a well-formed `region-marker` (e.g. `::name`, no spaces, or trailing content after the closing `::`) emits a `bad-region` warning and is kept as literal content — it is not silently dropped.
|
|
67
68
|
- `note` (a `???` line and its continuation until a blank line) is a speaker note: shown in the presenter overlay, omitted from audience view and PDF.
|
|
68
69
|
|
|
69
70
|
### 4.1 Build sigil
|
|
@@ -100,7 +101,7 @@ Classes chain (`[40-80%]{.grad-purple .huge}`). Resolution (see themes.md → *M
|
|
|
100
101
|
- `.xs .sm .md .lg .xl .xxl .huge` → font-size (type-scale steps `small`…`stat`).
|
|
101
102
|
- `.bold`, `.muted`, and image utilities `.round`, `.cover`, `.shadow`.
|
|
102
103
|
|
|
103
|
-
A class that is **none** of the above (e.g. a typo like `.xxlarge` or `.grad-teel`) emits an `unknown-class` / `unknown-gradient` warning rather than silently degrading to inert/invisible CSS. Run `slaide slots <deck>` to print the legal slot, colour, gradient and size names for a deck's master; `slaide validate <deck> [--strict]` surfaces all diagnostics (`--strict` makes warnings fail).
|
|
104
|
+
A class that is **none** of the above (e.g. a typo like `.xxlarge` or `.grad-teel`) emits an `unknown-class` / `unknown-gradient` warning rather than silently degrading to inert/invisible CSS. A `{…}` brace that isn't a valid dot-class list at all (missing the leading dot, empty, or otherwise malformed) emits a `bad-span` warning instead — never on a plain link `[text](url)` or a `[1]`-style reference, which don't have this shape. Run `slaide slots <deck>` to print the legal slot, colour, gradient and size names for a deck's master; `slaide validate <deck> [--strict]` surfaces all diagnostics (`--strict` makes warnings fail).
|
|
104
105
|
|
|
105
106
|
## 6. Image & attribute brace
|
|
106
107
|
|
|
@@ -68,7 +68,7 @@ My Talk
|
|
|
68
68
|
|
|
69
69
|
## 4. Slide body
|
|
70
70
|
|
|
71
|
-
- **Regions:** `:: name ::` on its own line routes following Markdown into slot `name`. Text before any marker → the main slot (`body`, else the first slot).
|
|
71
|
+
- **Regions:** `:: name ::` on its own line routes following Markdown into slot `name`. Text before any marker → the main slot (`body`, else the first slot). A near-miss (`::` followed by content that isn't `:: name ::` alone on its line, e.g. `::name` or `:: name :: extra`) warns (`bad-region`) instead of silently rendering as literal text.
|
|
72
72
|
- **Markdown:** standard CommonMark — headings, lists, **bold**, *italic*, `code`, fences, > quotes, links, tables, images. (A single newline is a space; blank line = new paragraph.)
|
|
73
73
|
- **Builds `>>>`:** end an item/block with `>>>` to reveal it; steps auto-number in order, same step = simultaneous. PDF shows all. Add an entrance and timing after the sigil (§4.7).
|
|
74
74
|
- **Notes `??? …`:** a `???` line (until a blank line) is a speaker note — presenter overlay only, hidden from audience and PDF.
|
|
@@ -88,7 +88,7 @@ Wrap inline text with one or more chainable dot-classes:
|
|
|
88
88
|
| `.xs .sm .md .lg .xl .xxl .huge` | font size (type-scale steps small→…→stat) |
|
|
89
89
|
| `.bold` / `.muted` | weight 800 / muted colour |
|
|
90
90
|
|
|
91
|
-
An unknown class warns (`unknown-class`/`unknown-gradient`) — it never silently degrades. Resolved against the master (see [themes.md](themes.md#marks--utility-classes)).
|
|
91
|
+
An unknown class warns (`unknown-class`/`unknown-gradient`) — it never silently degrades. Resolved against the master (see [themes.md](themes.md#marks--utility-classes)). A `{…}` that isn't a valid dot-class list (missing the leading dot, empty, or otherwise malformed) warns (`bad-span`) rather than showing the raw braces; plain links `[text](url)` and `[1]`-style refs are never affected.
|
|
92
92
|
|
|
93
93
|
### 4.2 Images — `{ … }`
|
|
94
94
|
|
|
@@ -212,16 +212,20 @@ See [themes.md](themes.md) to author a master.
|
|
|
212
212
|
| `empty-deck` | error | No slides were found. |
|
|
213
213
|
| `no-master` | error | The deck's `master:` could not be resolved. |
|
|
214
214
|
| `unknown-layout` | error | A slide's `layout:` names no layout in the master. |
|
|
215
|
+
| `unknown-slot` | error | A `:: name ::` region names a slot the resolved layout (explicit `layout:` or the deck's default) doesn't define — the content is silently dropped. |
|
|
215
216
|
| `no-headmatter` | warning | No leading `---` deck headmatter block (e.g. `master:`). |
|
|
216
217
|
| `bad-config` | warning | A headmatter/frontmatter block is not valid YAML (rendered with defaults). |
|
|
217
218
|
| `ambiguous-frontmatter` | warning | A config-shaped **body** was eaten as frontmatter — escape the first line with `\` or add an explicit `---`. |
|
|
219
|
+
| `bad-region` | warning | A line starts `::` but isn't a well-formed `:: name ::` marker (alone on its line) — rendered as literal body text. |
|
|
218
220
|
| `unknown-transition` | warning | A `transition:` names no built-in transition (§3.1). |
|
|
219
221
|
| `unknown-background` | warning | A `background:` names no master background. |
|
|
220
222
|
| `unknown-variant` | warning | A `variant:` names no master variant. |
|
|
221
|
-
| `
|
|
223
|
+
| `overlapping-slots` | warning | Two+ layout slots share one grid cell, or a slot's key is missing from `grid-template-areas` (default-stacks) — content renders on top of other content. |
|
|
222
224
|
| `unknown-class` | warning | An inline `[x]{.cls}` is not a size / `.bold` / `.muted` / `.grad` / master colour / CSS colour. |
|
|
223
225
|
| `unknown-gradient` | warning | A `.grad-<name>` or slot `fill:` names no master gradient (text gets no fill — often invisible). |
|
|
226
|
+
| `bad-span` | warning | A `[text]{…}` brace isn't a valid dot-class list (missing dot, empty/invalid list, unmatched brace) — shown as literal text. |
|
|
224
227
|
| `unknown-color` | warning | A slot `color:`/`box:` names no master role/palette or CSS colour (falls back to a literal, often invisible). |
|
|
228
|
+
| `unknown-var` | warning | A raw `var(--X)` (e.g. in inline HTML) names no token the master defines — resolves to nothing, often rendering smaller/invisible. Auto-fixed to `var(--X, <fallback>)`. |
|
|
225
229
|
| `unknown-entrance` | warning | A `>>> <name>` build entrance isn't a known effect (§4.7). |
|
|
226
230
|
| `stray-build` | warning | A `>>>` on a non-list line (headings, bold labels, paragraphs). |
|
|
227
231
|
| `low-contrast` | warning | Resolved text ≈ its background (dark-on-dark / light-on-light) — bind a `variant:` or set an explicit `color:`. |
|