@artifact-kit/deckkit-pro 0.1.0 → 0.1.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/index.cjs CHANGED
@@ -2,14 +2,18 @@
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const gradientFill = require("./gradient-fill.cjs");
4
4
  const svgToCustomGeometry = require("./svg-to-custom-geometry.cjs");
5
+ const lifecycle = require("./lifecycle.cjs");
6
+ const svgFallback = require("./svg-fallback.cjs");
5
7
  const svgToPng = require("./svg-to-png.cjs");
6
8
  const image = require("./image.cjs");
7
- function deckkitPro() {
9
+ function deckkitPro(options = {}) {
10
+ if (options.DeckKit) lifecycle.installDeckKitLifecyclePatch(options.DeckKit);
8
11
  return {
9
12
  name: "@artifact-kit/deckkit-pro",
10
13
  setup(context) {
11
14
  gradientFill.setupGradientFill(context);
12
15
  svgToCustomGeometry.setupSvgCustomGeometry(context);
16
+ svgFallback.setupSvgPngFallback(context, options.DeckKit);
13
17
  }
14
18
  };
15
19
  }
@@ -18,6 +22,10 @@ exports.setupGradientFill = gradientFill.setupGradientFill;
18
22
  exports.handleSvgCustomGeometry = svgToCustomGeometry.handleSvgCustomGeometry;
19
23
  exports.setupSvgCustomGeometry = svgToCustomGeometry.setupSvgCustomGeometry;
20
24
  exports.svgToCustomGeometry = svgToCustomGeometry.svgToCustomGeometry;
25
+ exports.addBeforeWriteHook = lifecycle.addBeforeWriteHook;
26
+ exports.installDeckKitLifecyclePatch = lifecycle.installDeckKitLifecyclePatch;
27
+ exports.prepareSvgPngFallbacks = svgFallback.prepareSvgPngFallbacks;
28
+ exports.setupSvgPngFallback = svgFallback.setupSvgPngFallback;
21
29
  exports.renderSvgToPng = svgToPng.renderSvgToPng;
22
30
  exports.writeSvgToPng = svgToPng.writeSvgToPng;
23
31
  exports.compareImages = image.compareImages;
package/dist/index.js CHANGED
@@ -2,31 +2,41 @@ import { setupGradientFill } from "./gradient-fill.js";
2
2
  import { renderGradientFill } from "./gradient-fill.js";
3
3
  import { setupSvgCustomGeometry } from "./svg-to-custom-geometry.js";
4
4
  import { handleSvgCustomGeometry, svgToCustomGeometry } from "./svg-to-custom-geometry.js";
5
+ import { installDeckKitLifecyclePatch } from "./lifecycle.js";
6
+ import { addBeforeWriteHook } from "./lifecycle.js";
7
+ import { setupSvgPngFallback } from "./svg-fallback.js";
8
+ import { prepareSvgPngFallbacks } from "./svg-fallback.js";
5
9
  import { renderSvgToPng, writeSvgToPng } from "./svg-to-png.js";
6
10
  import { compareImages, cropImage, getImageInfo, overlayImages, resizeImage, sampleColor, writeImage } from "./image.js";
7
- function deckkitPro() {
11
+ function deckkitPro(options = {}) {
12
+ if (options.DeckKit) installDeckKitLifecyclePatch(options.DeckKit);
8
13
  return {
9
14
  name: "@artifact-kit/deckkit-pro",
10
15
  setup(context) {
11
16
  setupGradientFill(context);
12
17
  setupSvgCustomGeometry(context);
18
+ setupSvgPngFallback(context, options.DeckKit);
13
19
  }
14
20
  };
15
21
  }
16
22
  export {
23
+ addBeforeWriteHook,
17
24
  compareImages,
18
25
  cropImage,
19
26
  deckkitPro,
20
27
  deckkitPro as default,
21
28
  getImageInfo,
22
29
  handleSvgCustomGeometry,
30
+ installDeckKitLifecyclePatch,
23
31
  overlayImages,
32
+ prepareSvgPngFallbacks,
24
33
  renderGradientFill,
25
34
  renderSvgToPng,
26
35
  resizeImage,
27
36
  sampleColor,
28
37
  setupGradientFill,
29
38
  setupSvgCustomGeometry,
39
+ setupSvgPngFallback,
30
40
  svgToCustomGeometry,
31
41
  writeImage,
32
42
  writeSvgToPng
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const DeckKit = require("@artifact-kit/deckkit");
4
+ const LIFECYCLE_PATCHED = Symbol.for("@artifact-kit/deckkit-pro:lifecycle-patched");
5
+ const setupDecks = /* @__PURE__ */ new WeakMap();
6
+ const beforeWriteHooks = /* @__PURE__ */ new WeakMap();
7
+ const prototypeBeforeWriteHooks = /* @__PURE__ */ new WeakMap();
8
+ function addBeforeWriteHook(context, id, hook, deckKit) {
9
+ const deck = setupDecks.get(context);
10
+ if (!deck) {
11
+ const proto = deckKit?.prototype;
12
+ if (proto) {
13
+ addPrototypeBeforeWriteHook(proto, id, hook);
14
+ return;
15
+ }
16
+ throw new Error(
17
+ `DeckKit Pro lifecycle hook "${id}" could not find the active DeckKit instance. This usually means @artifact-kit/deckkit-pro and @artifact-kit/deckkit resolved different @artifact-kit/deckkit copies. Use matching package imports, or pass the caller constructor with deckkitPro({ DeckKit }).`
18
+ );
19
+ }
20
+ let hooks = beforeWriteHooks.get(deck);
21
+ if (!hooks) {
22
+ hooks = /* @__PURE__ */ new Map();
23
+ beforeWriteHooks.set(deck, hooks);
24
+ }
25
+ hooks.set(id, hook);
26
+ }
27
+ function installDeckKitLifecyclePatch(deckKit = DeckKit) {
28
+ const proto = deckKit.prototype;
29
+ if (!proto || proto[LIFECYCLE_PATCHED]) return;
30
+ const originalUse = proto.use;
31
+ const originalWrite = proto.write;
32
+ const originalWriteFile = proto.writeFile;
33
+ if (typeof originalUse === "function") {
34
+ proto.use = function patchedUse(plugin, options) {
35
+ const pluginWithLifecycleContext = {
36
+ ...plugin,
37
+ setup: (context, setupOptions) => {
38
+ setupDecks.set(context, this);
39
+ try {
40
+ plugin.setup(context, setupOptions);
41
+ } finally {
42
+ setupDecks.delete(context);
43
+ }
44
+ }
45
+ };
46
+ return originalUse.call(this, pluginWithLifecycleContext, options);
47
+ };
48
+ }
49
+ if (typeof originalWrite === "function") {
50
+ proto.write = async function patchedWrite(...args) {
51
+ await runBeforeWriteHooks(this);
52
+ return await originalWrite.apply(this, args);
53
+ };
54
+ }
55
+ if (typeof originalWriteFile === "function") {
56
+ proto.writeFile = async function patchedWriteFile(...args) {
57
+ await runBeforeWriteHooks(this);
58
+ return await originalWriteFile.apply(this, args);
59
+ };
60
+ }
61
+ proto[LIFECYCLE_PATCHED] = true;
62
+ }
63
+ async function runBeforeWriteHooks(deck) {
64
+ const proto = Object.getPrototypeOf(deck);
65
+ const prototypeHooks = proto ? prototypeBeforeWriteHooks.get(proto) : void 0;
66
+ if (prototypeHooks) {
67
+ for (const hook of prototypeHooks.values()) {
68
+ await hook(deck);
69
+ }
70
+ }
71
+ const hooks = beforeWriteHooks.get(deck);
72
+ if (!hooks) return;
73
+ for (const hook of hooks.values()) {
74
+ await hook(deck);
75
+ }
76
+ }
77
+ function addPrototypeBeforeWriteHook(proto, id, hook) {
78
+ let hooks = prototypeBeforeWriteHooks.get(proto);
79
+ if (!hooks) {
80
+ hooks = /* @__PURE__ */ new Map();
81
+ prototypeBeforeWriteHooks.set(proto, hooks);
82
+ }
83
+ hooks.set(id, hook);
84
+ }
85
+ installDeckKitLifecyclePatch();
86
+ exports.addBeforeWriteHook = addBeforeWriteHook;
87
+ exports.installDeckKitLifecyclePatch = installDeckKitLifecyclePatch;
@@ -0,0 +1,87 @@
1
+ import DeckKit from "@artifact-kit/deckkit";
2
+ const LIFECYCLE_PATCHED = Symbol.for("@artifact-kit/deckkit-pro:lifecycle-patched");
3
+ const setupDecks = /* @__PURE__ */ new WeakMap();
4
+ const beforeWriteHooks = /* @__PURE__ */ new WeakMap();
5
+ const prototypeBeforeWriteHooks = /* @__PURE__ */ new WeakMap();
6
+ function addBeforeWriteHook(context, id, hook, deckKit) {
7
+ const deck = setupDecks.get(context);
8
+ if (!deck) {
9
+ const proto = deckKit?.prototype;
10
+ if (proto) {
11
+ addPrototypeBeforeWriteHook(proto, id, hook);
12
+ return;
13
+ }
14
+ throw new Error(
15
+ `DeckKit Pro lifecycle hook "${id}" could not find the active DeckKit instance. This usually means @artifact-kit/deckkit-pro and @artifact-kit/deckkit resolved different @artifact-kit/deckkit copies. Use matching package imports, or pass the caller constructor with deckkitPro({ DeckKit }).`
16
+ );
17
+ }
18
+ let hooks = beforeWriteHooks.get(deck);
19
+ if (!hooks) {
20
+ hooks = /* @__PURE__ */ new Map();
21
+ beforeWriteHooks.set(deck, hooks);
22
+ }
23
+ hooks.set(id, hook);
24
+ }
25
+ function installDeckKitLifecyclePatch(deckKit = DeckKit) {
26
+ const proto = deckKit.prototype;
27
+ if (!proto || proto[LIFECYCLE_PATCHED]) return;
28
+ const originalUse = proto.use;
29
+ const originalWrite = proto.write;
30
+ const originalWriteFile = proto.writeFile;
31
+ if (typeof originalUse === "function") {
32
+ proto.use = function patchedUse(plugin, options) {
33
+ const pluginWithLifecycleContext = {
34
+ ...plugin,
35
+ setup: (context, setupOptions) => {
36
+ setupDecks.set(context, this);
37
+ try {
38
+ plugin.setup(context, setupOptions);
39
+ } finally {
40
+ setupDecks.delete(context);
41
+ }
42
+ }
43
+ };
44
+ return originalUse.call(this, pluginWithLifecycleContext, options);
45
+ };
46
+ }
47
+ if (typeof originalWrite === "function") {
48
+ proto.write = async function patchedWrite(...args) {
49
+ await runBeforeWriteHooks(this);
50
+ return await originalWrite.apply(this, args);
51
+ };
52
+ }
53
+ if (typeof originalWriteFile === "function") {
54
+ proto.writeFile = async function patchedWriteFile(...args) {
55
+ await runBeforeWriteHooks(this);
56
+ return await originalWriteFile.apply(this, args);
57
+ };
58
+ }
59
+ proto[LIFECYCLE_PATCHED] = true;
60
+ }
61
+ async function runBeforeWriteHooks(deck) {
62
+ const proto = Object.getPrototypeOf(deck);
63
+ const prototypeHooks = proto ? prototypeBeforeWriteHooks.get(proto) : void 0;
64
+ if (prototypeHooks) {
65
+ for (const hook of prototypeHooks.values()) {
66
+ await hook(deck);
67
+ }
68
+ }
69
+ const hooks = beforeWriteHooks.get(deck);
70
+ if (!hooks) return;
71
+ for (const hook of hooks.values()) {
72
+ await hook(deck);
73
+ }
74
+ }
75
+ function addPrototypeBeforeWriteHook(proto, id, hook) {
76
+ let hooks = prototypeBeforeWriteHooks.get(proto);
77
+ if (!hooks) {
78
+ hooks = /* @__PURE__ */ new Map();
79
+ prototypeBeforeWriteHooks.set(proto, hooks);
80
+ }
81
+ hooks.set(id, hook);
82
+ }
83
+ installDeckKitLifecyclePatch();
84
+ export {
85
+ addBeforeWriteHook,
86
+ installDeckKitLifecyclePatch
87
+ };
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const promises = require("node:fs/promises");
4
+ const node_buffer = require("node:buffer");
5
+ const lifecycle = require("./lifecycle.cjs");
6
+ const svgToPng = require("./svg-to-png.cjs");
7
+ const EMU_PER_INCH = 914400;
8
+ const FALLBACK_DPI = 96;
9
+ async function prepareSvgPngFallbacks(deck) {
10
+ for (const rel of collectSvgPngFallbackRels(deck)) {
11
+ if (hasPngData(rel.data)) continue;
12
+ const svg = await readSvgForFallback(rel);
13
+ const png = await svgToPng.renderSvgToPng(svg, {
14
+ width: emuToPixels(rel.svgSize?.w),
15
+ height: emuToPixels(rel.svgSize?.h),
16
+ fit: "contain"
17
+ });
18
+ rel.type = "image/png";
19
+ rel.extn = "png";
20
+ rel.data = png.toString("base64");
21
+ rel.isSvgPng = false;
22
+ }
23
+ }
24
+ function setupSvgPngFallback(context, deckKit) {
25
+ lifecycle.addBeforeWriteHook(context, "svg-png-fallback", prepareSvgPngFallbacks, deckKit);
26
+ }
27
+ function collectSvgPngFallbackRels(deck) {
28
+ const containers = [
29
+ ...deck.slides ?? [],
30
+ ...deck.slideLayouts ?? [],
31
+ deck.masterSlide
32
+ ].filter(Boolean);
33
+ return containers.flatMap(
34
+ (container) => (container._relsMedia ?? []).filter((rel) => rel.isSvgPng && rel.type === "image/png")
35
+ );
36
+ }
37
+ async function readSvgForFallback(rel) {
38
+ if (typeof rel.data === "string" && looksLikeSvgData(rel.data)) return decodeSvgData(rel.data);
39
+ if (typeof rel.path === "string" && rel.path.length > 0) {
40
+ if (/^https?:\/\//i.test(rel.path)) {
41
+ const response = await fetch(rel.path);
42
+ if (!response.ok) throw new Error(`Unable to fetch SVG PNG fallback source ${rel.path}: ${response.status} ${response.statusText}`);
43
+ return await response.text();
44
+ }
45
+ return await promises.readFile(rel.path, "utf8");
46
+ }
47
+ throw new Error(`Unable to render SVG PNG fallback for ${rel.Target ?? "unknown media"}: missing SVG data or path.`);
48
+ }
49
+ function looksLikeSvgData(data) {
50
+ const trimmed = data.trimStart();
51
+ return trimmed.startsWith("<svg") || trimmed.startsWith("data:image/svg+xml");
52
+ }
53
+ function decodeSvgData(data) {
54
+ if (data.trimStart().startsWith("<svg")) return data;
55
+ const [, meta = "", payload = ""] = /^data:image\/svg\+xml([^,]*),(.*)$/i.exec(data) ?? [];
56
+ if (!payload) return data;
57
+ if (meta.includes(";base64")) return node_buffer.Buffer.from(payload, "base64").toString("utf8");
58
+ return decodeURIComponent(payload);
59
+ }
60
+ function hasPngData(data) {
61
+ if (typeof data !== "string") return false;
62
+ return data.startsWith("data:image/png") || data.startsWith("iVBORw0KGgo");
63
+ }
64
+ function emuToPixels(value) {
65
+ if (!value || value <= 0) return void 0;
66
+ return Math.max(1, Math.round(value / EMU_PER_INCH * FALLBACK_DPI));
67
+ }
68
+ exports.prepareSvgPngFallbacks = prepareSvgPngFallbacks;
69
+ exports.setupSvgPngFallback = setupSvgPngFallback;
@@ -0,0 +1,69 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { Buffer } from "node:buffer";
3
+ import { addBeforeWriteHook } from "./lifecycle.js";
4
+ import { renderSvgToPng } from "./svg-to-png.js";
5
+ const EMU_PER_INCH = 914400;
6
+ const FALLBACK_DPI = 96;
7
+ async function prepareSvgPngFallbacks(deck) {
8
+ for (const rel of collectSvgPngFallbackRels(deck)) {
9
+ if (hasPngData(rel.data)) continue;
10
+ const svg = await readSvgForFallback(rel);
11
+ const png = await renderSvgToPng(svg, {
12
+ width: emuToPixels(rel.svgSize?.w),
13
+ height: emuToPixels(rel.svgSize?.h),
14
+ fit: "contain"
15
+ });
16
+ rel.type = "image/png";
17
+ rel.extn = "png";
18
+ rel.data = png.toString("base64");
19
+ rel.isSvgPng = false;
20
+ }
21
+ }
22
+ function setupSvgPngFallback(context, deckKit) {
23
+ addBeforeWriteHook(context, "svg-png-fallback", prepareSvgPngFallbacks, deckKit);
24
+ }
25
+ function collectSvgPngFallbackRels(deck) {
26
+ const containers = [
27
+ ...deck.slides ?? [],
28
+ ...deck.slideLayouts ?? [],
29
+ deck.masterSlide
30
+ ].filter(Boolean);
31
+ return containers.flatMap(
32
+ (container) => (container._relsMedia ?? []).filter((rel) => rel.isSvgPng && rel.type === "image/png")
33
+ );
34
+ }
35
+ async function readSvgForFallback(rel) {
36
+ if (typeof rel.data === "string" && looksLikeSvgData(rel.data)) return decodeSvgData(rel.data);
37
+ if (typeof rel.path === "string" && rel.path.length > 0) {
38
+ if (/^https?:\/\//i.test(rel.path)) {
39
+ const response = await fetch(rel.path);
40
+ if (!response.ok) throw new Error(`Unable to fetch SVG PNG fallback source ${rel.path}: ${response.status} ${response.statusText}`);
41
+ return await response.text();
42
+ }
43
+ return await readFile(rel.path, "utf8");
44
+ }
45
+ throw new Error(`Unable to render SVG PNG fallback for ${rel.Target ?? "unknown media"}: missing SVG data or path.`);
46
+ }
47
+ function looksLikeSvgData(data) {
48
+ const trimmed = data.trimStart();
49
+ return trimmed.startsWith("<svg") || trimmed.startsWith("data:image/svg+xml");
50
+ }
51
+ function decodeSvgData(data) {
52
+ if (data.trimStart().startsWith("<svg")) return data;
53
+ const [, meta = "", payload = ""] = /^data:image\/svg\+xml([^,]*),(.*)$/i.exec(data) ?? [];
54
+ if (!payload) return data;
55
+ if (meta.includes(";base64")) return Buffer.from(payload, "base64").toString("utf8");
56
+ return decodeURIComponent(payload);
57
+ }
58
+ function hasPngData(data) {
59
+ if (typeof data !== "string") return false;
60
+ return data.startsWith("data:image/png") || data.startsWith("iVBORw0KGgo");
61
+ }
62
+ function emuToPixels(value) {
63
+ if (!value || value <= 0) return void 0;
64
+ return Math.max(1, Math.round(value / EMU_PER_INCH * FALLBACK_DPI));
65
+ }
66
+ export {
67
+ prepareSvgPngFallbacks,
68
+ setupSvgPngFallback
69
+ };
@@ -10,7 +10,8 @@ async function renderSvgToPng(svg, options = {}) {
10
10
  image.resize({
11
11
  width: options.width,
12
12
  height: options.height,
13
- fit: options.fit ?? "contain"
13
+ fit: options.fit ?? "contain",
14
+ background: options.background ?? { r: 0, g: 0, b: 0, alpha: 0 }
14
15
  });
15
16
  }
16
17
  if (options.background !== void 0) {
@@ -8,7 +8,8 @@ async function renderSvgToPng(svg, options = {}) {
8
8
  image.resize({
9
9
  width: options.width,
10
10
  height: options.height,
11
- fit: options.fit ?? "contain"
11
+ fit: options.fit ?? "contain",
12
+ background: options.background ?? { r: 0, g: 0, b: 0, alpha: 0 }
12
13
  });
13
14
  }
14
15
  if (options.background !== void 0) {
@@ -1,14 +1,26 @@
1
1
  import type { DeckKitPlugin } from '@artifact-kit/deckkit';
2
2
  import './gradient-fill';
3
3
  import './svg-to-custom-geometry';
4
+ import './lifecycle';
5
+ import { type DeckKitConstructor } from './lifecycle';
6
+ export interface DeckKitProOptions {
7
+ /**
8
+ * DeckKit constructor to patch when deckkit-pro is loaded from a different
9
+ * package location than the caller's @artifact-kit/deckkit import.
10
+ */
11
+ DeckKit?: DeckKitConstructor;
12
+ }
4
13
  export type { GradientFillProps, GradientFillStop } from './gradient-fill';
5
14
  export { renderGradientFill, setupGradientFill } from './gradient-fill';
6
15
  export type { SvgToPngFit, SvgToPngOptions } from './svg-to-png';
7
16
  export { renderSvgToPng, writeSvgToPng } from './svg-to-png';
17
+ export { setupSvgPngFallback, prepareSvgPngFallbacks } from './svg-fallback';
18
+ export { addBeforeWriteHook, installDeckKitLifecyclePatch } from './lifecycle';
19
+ export type { DeckKitBeforeWriteHook, DeckKitConstructor } from './lifecycle';
8
20
  export type { SvgCustomGeometryPath, SvgToCustomGeometryOptions, SvgToCustomGeometryResult } from './svg-to-custom-geometry';
9
21
  export { handleSvgCustomGeometry, setupSvgCustomGeometry, svgToCustomGeometry } from './svg-to-custom-geometry';
10
22
  export type { CompareImagesOptions, CropImageOptions, ImageInfo, OverlayImagesOptions, ResizeImageOptions, SampleColorResult, } from './image';
11
23
  export { compareImages, cropImage, getImageInfo, overlayImages, resizeImage, sampleColor, writeImage } from './image';
12
- export declare function deckkitPro(): DeckKitPlugin;
24
+ export declare function deckkitPro(options?: DeckKitProOptions): DeckKitPlugin;
13
25
  export default deckkitPro;
14
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,iBAAiB,CAAA;AACxB,OAAO,0BAA0B,CAAA;AAIjC,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAC1E,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACvE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5D,YAAY,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AAC5H,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC/G,YAAY,EACX,oBAAoB,EACpB,gBAAgB,EAChB,SAAS,EACT,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,GACjB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAErH,wBAAgB,UAAU,IAAI,aAAa,CAQ1C;AAED,eAAe,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,iBAAiB,CAAA;AACxB,OAAO,0BAA0B,CAAA;AACjC,OAAO,aAAa,CAAA;AAIpB,OAAO,EAAgC,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAEnF,MAAM,WAAW,iBAAiB;IACjC;;;OAGG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAA;CAC5B;AAED,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAC1E,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACvE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAC5E,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAA;AAC9E,YAAY,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAC7E,YAAY,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AAC5H,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC/G,YAAY,EACX,oBAAoB,EACpB,gBAAgB,EAChB,SAAS,EACT,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,GACjB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAErH,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,aAAa,CAWzE;AAED,eAAe,UAAU,CAAA"}
@@ -0,0 +1,8 @@
1
+ import type { DeckKitPluginContext } from '@artifact-kit/deckkit';
2
+ export type DeckKitBeforeWriteHook = (deck: unknown) => void | Promise<void>;
3
+ export type DeckKitConstructor = {
4
+ prototype?: Record<PropertyKey, unknown>;
5
+ };
6
+ export declare function addBeforeWriteHook(context: DeckKitPluginContext, id: string, hook: DeckKitBeforeWriteHook, deckKit?: DeckKitConstructor): void;
7
+ export declare function installDeckKitLifecyclePatch(deckKit?: DeckKitConstructor): void;
8
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/lifecycle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAIhF,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAC5E,MAAM,MAAM,kBAAkB,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;CAAE,CAAA;AAa7E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAsB9I;AAED,wBAAgB,4BAA4B,CAAC,OAAO,GAAE,kBAA6D,GAAG,IAAI,CAyCzH"}
@@ -0,0 +1,5 @@
1
+ import type { DeckKitPluginContext } from '@artifact-kit/deckkit';
2
+ import { type DeckKitConstructor } from './lifecycle';
3
+ export declare function prepareSvgPngFallbacks(deck: unknown): Promise<void>;
4
+ export declare function setupSvgPngFallback(context: DeckKitPluginContext, deckKit?: DeckKitConstructor): void;
5
+ //# sourceMappingURL=svg-fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg-fallback.d.ts","sourceRoot":"","sources":["../../src/svg-fallback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAGjE,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAA;AA0BzE,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBzE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAErG"}
@@ -1 +1 @@
1
- {"version":3,"file":"svg-to-png.d.ts","sourceRoot":"","sources":["../../src/svg-to-png.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGpC,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;AAE7E,MAAM,WAAW,eAAe;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,WAAW,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACzE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBhG;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/G"}
1
+ {"version":3,"file":"svg-to-png.d.ts","sourceRoot":"","sources":["../../src/svg-to-png.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGpC,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;AAE7E,MAAM,WAAW,eAAe;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,WAAW,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACzE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBhG;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/G"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@artifact-kit/deckkit-pro",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Commercial DeckKit plugin bundle.",
5
5
  "license": "SEE LICENSE IN COMMERCIAL-LICENSE.md",
6
6
  "type": "module",
@@ -43,11 +43,21 @@
43
43
  "import": "./dist/image.js",
44
44
  "require": "./dist/image.cjs"
45
45
  },
46
+ "./lifecycle": {
47
+ "types": "./dist/types/lifecycle.d.ts",
48
+ "import": "./dist/lifecycle.js",
49
+ "require": "./dist/lifecycle.cjs"
50
+ },
46
51
  "./svg-to-custom-geometry": {
47
52
  "types": "./dist/types/svg-to-custom-geometry.d.ts",
48
53
  "import": "./dist/svg-to-custom-geometry.js",
49
54
  "require": "./dist/svg-to-custom-geometry.cjs"
50
55
  },
56
+ "./svg-fallback": {
57
+ "types": "./dist/types/svg-fallback.d.ts",
58
+ "import": "./dist/svg-fallback.js",
59
+ "require": "./dist/svg-fallback.cjs"
60
+ },
51
61
  "./svg-to-png": {
52
62
  "types": "./dist/types/svg-to-png.d.ts",
53
63
  "import": "./dist/svg-to-png.js",
@@ -78,7 +88,7 @@
78
88
  "test": "tsc -p tsconfig.test.json && node test/paper-svg-path.test.cjs"
79
89
  },
80
90
  "peerDependencies": {
81
- "@artifact-kit/deckkit": "^0.1.0"
91
+ "@artifact-kit/deckkit": "^0.1.2"
82
92
  },
83
93
  "dependencies": {
84
94
  "paper-jsdom": "^0.12.18",