sketchmark 1.4.0 → 1.4.1
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/dist/animation/index.d.ts.map +1 -1
- package/dist/export/index.d.ts.map +1 -1
- package/dist/export/state.d.ts +8 -0
- package/dist/export/state.d.ts.map +1 -0
- package/dist/index.cjs +74 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +74 -6
- package/dist/index.js.map +1 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/sketchmark.iife.js +74 -6
- package/package.json +1 -1
package/dist/render.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAiB,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAK1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAiB,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAK1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAGlD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACtC,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,aAAa,CAAC,EAAE,qBAAqB,CAAC;IACtC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;CACpE;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;IAC1C,IAAI,EAAE,mBAAmB,CAAC;IAC1B,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,eAAe,CAAC;IACzC,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,eAAe,CAiG9D"}
|
package/dist/sketchmark.iife.js
CHANGED
|
@@ -11402,8 +11402,11 @@ var AIDiagram = (function (exports) {
|
|
|
11402
11402
|
* 4. After guide finishes → fade in rough.js element, remove guide
|
|
11403
11403
|
*/
|
|
11404
11404
|
_animateAnnotation(roughEl, guideD, silent) {
|
|
11405
|
-
if (silent)
|
|
11405
|
+
if (silent) {
|
|
11406
|
+
roughEl.style.opacity = "1";
|
|
11407
|
+
roughEl.style.transition = "none";
|
|
11406
11408
|
return;
|
|
11409
|
+
}
|
|
11407
11410
|
// Hide rough.js element — will be revealed after guide draws
|
|
11408
11411
|
roughEl.style.opacity = "0";
|
|
11409
11412
|
roughEl.style.transition = "none";
|
|
@@ -11693,10 +11696,74 @@ var AIDiagram = (function (exports) {
|
|
|
11693
11696
|
.skm-caption { pointer-events: none; user-select: none; }
|
|
11694
11697
|
`;
|
|
11695
11698
|
|
|
11699
|
+
const exportAnimationState = new WeakMap();
|
|
11700
|
+
function bindExportAnimationState(svg, state) {
|
|
11701
|
+
exportAnimationState.set(svg, state);
|
|
11702
|
+
}
|
|
11703
|
+
function getExportAnimationState(svg) {
|
|
11704
|
+
return exportAnimationState.get(svg);
|
|
11705
|
+
}
|
|
11706
|
+
|
|
11696
11707
|
// ============================================================
|
|
11697
11708
|
// sketchmark — Export System
|
|
11698
11709
|
// SVG, PNG, Canvas, GIF (stub), MP4 (stub)
|
|
11699
11710
|
// ============================================================
|
|
11711
|
+
const EXPORT_SVG_STYLE_ID = "sketchmark-export-state";
|
|
11712
|
+
const EXPORT_SVG_STATE_CSS = `
|
|
11713
|
+
.ng, .gg, .tg, .ntg, .cg, .eg, .mdg {
|
|
11714
|
+
animation: none !important;
|
|
11715
|
+
transition: none !important;
|
|
11716
|
+
}
|
|
11717
|
+
|
|
11718
|
+
.ng.hidden { opacity: 0 !important; pointer-events: none !important; }
|
|
11719
|
+
.gg.gg-hidden,
|
|
11720
|
+
.tg.gg-hidden,
|
|
11721
|
+
.ntg.gg-hidden,
|
|
11722
|
+
.cg.gg-hidden,
|
|
11723
|
+
.eg.gg-hidden,
|
|
11724
|
+
.mdg.gg-hidden { opacity: 0 !important; }
|
|
11725
|
+
|
|
11726
|
+
.ng.faded,
|
|
11727
|
+
.gg.faded,
|
|
11728
|
+
.tg.faded,
|
|
11729
|
+
.ntg.faded,
|
|
11730
|
+
.cg.faded,
|
|
11731
|
+
.eg.faded,
|
|
11732
|
+
.mdg.faded { opacity: 0.22 !important; }
|
|
11733
|
+
|
|
11734
|
+
.ng.hl path, .ng.hl rect, .ng.hl ellipse, .ng.hl polygon,
|
|
11735
|
+
.tg.hl path, .tg.hl rect,
|
|
11736
|
+
.ntg.hl path, .ntg.hl polygon,
|
|
11737
|
+
.cg.hl path, .cg.hl rect,
|
|
11738
|
+
.mdg.hl text,
|
|
11739
|
+
.eg.hl path, .eg.hl line, .eg.hl polygon { stroke-width: 2.8 !important; }
|
|
11740
|
+
`;
|
|
11741
|
+
function buildExportSnapshot(svg) {
|
|
11742
|
+
const snapshot = svg.cloneNode(true);
|
|
11743
|
+
const animationState = getExportAnimationState(svg);
|
|
11744
|
+
if (animationState?.steps.length) {
|
|
11745
|
+
snapshot.querySelector("#annotation-layer")?.remove();
|
|
11746
|
+
let rc = null;
|
|
11747
|
+
try {
|
|
11748
|
+
rc = rough.svg(snapshot);
|
|
11749
|
+
}
|
|
11750
|
+
catch {
|
|
11751
|
+
rc = null;
|
|
11752
|
+
}
|
|
11753
|
+
const anim = new AnimationController(snapshot, animationState.steps, undefined, rc, animationState.config);
|
|
11754
|
+
anim.goTo(animationState.steps.length - 1);
|
|
11755
|
+
}
|
|
11756
|
+
injectExportStyles(snapshot);
|
|
11757
|
+
return snapshot;
|
|
11758
|
+
}
|
|
11759
|
+
function injectExportStyles(svg) {
|
|
11760
|
+
if (svg.querySelector(`#${EXPORT_SVG_STYLE_ID}`))
|
|
11761
|
+
return;
|
|
11762
|
+
const style = document.createElementNS(SVG_NS$1, "style");
|
|
11763
|
+
style.setAttribute("id", EXPORT_SVG_STYLE_ID);
|
|
11764
|
+
style.textContent = EXPORT_SVG_STATE_CSS;
|
|
11765
|
+
svg.insertBefore(style, svg.firstChild);
|
|
11766
|
+
}
|
|
11700
11767
|
// ── Trigger browser download ──────────────────────────────
|
|
11701
11768
|
function download(blob, filename) {
|
|
11702
11769
|
const url = URL.createObjectURL(blob);
|
|
@@ -11710,15 +11777,15 @@ var AIDiagram = (function (exports) {
|
|
|
11710
11777
|
}
|
|
11711
11778
|
// ── SVG export ────────────────────────────────────────────
|
|
11712
11779
|
function exportSVG(svg, opts = {}) {
|
|
11713
|
-
const str = svgToString(svg);
|
|
11780
|
+
const str = svgToString(buildExportSnapshot(svg));
|
|
11714
11781
|
const blob = new Blob([str], { type: 'image/svg+xml;charset=utf-8' });
|
|
11715
11782
|
download(blob, opts.filename ?? 'diagram.svg');
|
|
11716
11783
|
}
|
|
11717
11784
|
function getSVGString(svg) {
|
|
11718
|
-
return svgToString(svg);
|
|
11785
|
+
return svgToString(buildExportSnapshot(svg));
|
|
11719
11786
|
}
|
|
11720
11787
|
function getSVGBlob(svg) {
|
|
11721
|
-
return new Blob([svgToString(svg)], { type: 'image/svg+xml;charset=utf-8' });
|
|
11788
|
+
return new Blob([svgToString(buildExportSnapshot(svg))], { type: 'image/svg+xml;charset=utf-8' });
|
|
11722
11789
|
}
|
|
11723
11790
|
// ── PNG export (from SVG via Canvas) ─────────────────────
|
|
11724
11791
|
async function exportPNG(svg, opts = {}) {
|
|
@@ -11744,7 +11811,7 @@ var AIDiagram = (function (exports) {
|
|
|
11744
11811
|
ctx.fillStyle = EXPORT.fallbackBg;
|
|
11745
11812
|
ctx.fillRect(0, 0, w, h);
|
|
11746
11813
|
}
|
|
11747
|
-
const svgStr = svgToString(svg);
|
|
11814
|
+
const svgStr = svgToString(buildExportSnapshot(svg));
|
|
11748
11815
|
const blob = new Blob([svgStr], { type: 'image/svg+xml;charset=utf-8' });
|
|
11749
11816
|
const url = URL.createObjectURL(blob);
|
|
11750
11817
|
await new Promise((resolve, reject) => {
|
|
@@ -11762,7 +11829,7 @@ var AIDiagram = (function (exports) {
|
|
|
11762
11829
|
}
|
|
11763
11830
|
// ── HTML export (self-contained) ──────────────────────────
|
|
11764
11831
|
function exportHTML(svg, dslSource, opts = {}) {
|
|
11765
|
-
const svgStr = svgToString(svg);
|
|
11832
|
+
const svgStr = svgToString(buildExportSnapshot(svg));
|
|
11766
11833
|
const html = `<!DOCTYPE html>
|
|
11767
11834
|
<html lang="en">
|
|
11768
11835
|
<head>
|
|
@@ -11943,6 +12010,7 @@ var AIDiagram = (function (exports) {
|
|
|
11943
12010
|
}
|
|
11944
12011
|
const containerEl = el instanceof SVGSVGElement ? undefined : el;
|
|
11945
12012
|
anim = new AnimationController(svg, ast.steps, containerEl, rc, ast.config);
|
|
12013
|
+
bindExportAnimationState(svg, { steps: ast.steps, config: ast.config });
|
|
11946
12014
|
}
|
|
11947
12015
|
if (typeof tts === "boolean") {
|
|
11948
12016
|
anim.tts = tts;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sketchmark",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.1",
|
|
4
4
|
"description": "A plain-text DSL for hand-drawn diagrams. Write boxes, edges, and groups as code — renders sketchy SVG/Canvas via rough.js with a built-in step-by-step animation system.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"diagram",
|