@artifact-kit/deckkit-pro 0.1.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/COMMERCIAL-LICENSE.md +5 -0
- package/README.md +50 -0
- package/dist/cli.cjs +194 -0
- package/dist/cli.js +193 -0
- package/dist/gradient-fill.cjs +44 -0
- package/dist/gradient-fill.js +44 -0
- package/dist/image.cjs +102 -0
- package/dist/image.js +102 -0
- package/dist/index.cjs +31 -0
- package/dist/index.js +33 -0
- package/dist/svg-to-custom-geometry.cjs +195 -0
- package/dist/svg-to-custom-geometry.js +195 -0
- package/dist/svg-to-png-cli.cjs +108 -0
- package/dist/svg-to-png-cli.js +107 -0
- package/dist/svg-to-png.cjs +27 -0
- package/dist/svg-to-png.js +27 -0
- package/dist/types/cli.d.ts +3 -0
- package/dist/types/cli.d.ts.map +1 -0
- package/dist/types/gradient-fill.d.ts +22 -0
- package/dist/types/gradient-fill.d.ts.map +1 -0
- package/dist/types/image.d.ts +62 -0
- package/dist/types/image.d.ts.map +1 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/svg-to-custom-geometry.d.ts +40 -0
- package/dist/types/svg-to-custom-geometry.d.ts.map +1 -0
- package/dist/types/svg-to-png-cli.d.ts +3 -0
- package/dist/types/svg-to-png-cli.d.ts.map +1 -0
- package/dist/types/svg-to-png.d.ts +18 -0
- package/dist/types/svg-to-png.d.ts.map +1 -0
- package/package.json +97 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { readFile } from "node:fs/promises";
|
|
4
|
+
import { basename, extname } from "node:path";
|
|
5
|
+
import { writeSvgToPng } from "./svg-to-png.js";
|
|
6
|
+
const FIT_VALUES = /* @__PURE__ */ new Set(["cover", "contain", "fill", "inside", "outside"]);
|
|
7
|
+
async function main(args) {
|
|
8
|
+
const parsed = parseArgs(args);
|
|
9
|
+
if (!parsed.input) {
|
|
10
|
+
printUsage();
|
|
11
|
+
process.exitCode = 1;
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const svg = await readSvgInput(parsed.input);
|
|
15
|
+
await writeSvgToPng(svg, parsed.output, parsed.options);
|
|
16
|
+
console.log(parsed.output);
|
|
17
|
+
}
|
|
18
|
+
function parseArgs(args) {
|
|
19
|
+
const result = {
|
|
20
|
+
output: "output.png",
|
|
21
|
+
options: {}
|
|
22
|
+
};
|
|
23
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
24
|
+
const arg = args[index];
|
|
25
|
+
switch (arg) {
|
|
26
|
+
case "-o":
|
|
27
|
+
case "--output":
|
|
28
|
+
result.output = readValue(args, ++index, arg);
|
|
29
|
+
break;
|
|
30
|
+
case "--width":
|
|
31
|
+
result.options.width = readNumber(args, ++index, arg);
|
|
32
|
+
break;
|
|
33
|
+
case "--height":
|
|
34
|
+
result.options.height = readNumber(args, ++index, arg);
|
|
35
|
+
break;
|
|
36
|
+
case "--density":
|
|
37
|
+
result.options.density = readNumber(args, ++index, arg);
|
|
38
|
+
break;
|
|
39
|
+
case "--fit": {
|
|
40
|
+
const fit = readValue(args, ++index, arg);
|
|
41
|
+
if (!FIT_VALUES.has(fit)) {
|
|
42
|
+
throw new Error(`Invalid --fit value "${fit}". Expected one of: ${Array.from(FIT_VALUES).join(", ")}`);
|
|
43
|
+
}
|
|
44
|
+
result.options.fit = fit;
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
case "--background":
|
|
48
|
+
result.options.background = readValue(args, ++index, arg);
|
|
49
|
+
break;
|
|
50
|
+
case "--compression-level":
|
|
51
|
+
result.options.compressionLevel = readNumber(args, ++index, arg);
|
|
52
|
+
break;
|
|
53
|
+
case "-h":
|
|
54
|
+
case "--help":
|
|
55
|
+
printUsage();
|
|
56
|
+
process.exit(0);
|
|
57
|
+
default:
|
|
58
|
+
if (arg.startsWith("-")) {
|
|
59
|
+
throw new Error(`Unknown option: ${arg}`);
|
|
60
|
+
}
|
|
61
|
+
if (result.input !== void 0) {
|
|
62
|
+
throw new Error(`Unexpected extra argument: ${arg}`);
|
|
63
|
+
}
|
|
64
|
+
result.input = arg;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
async function readSvgInput(input) {
|
|
70
|
+
if (existsSync(input)) {
|
|
71
|
+
return readFile(input, "utf8");
|
|
72
|
+
}
|
|
73
|
+
return input;
|
|
74
|
+
}
|
|
75
|
+
function readValue(args, index, option) {
|
|
76
|
+
const value = args[index];
|
|
77
|
+
if (!value) {
|
|
78
|
+
throw new Error(`Missing value for ${option}`);
|
|
79
|
+
}
|
|
80
|
+
return value;
|
|
81
|
+
}
|
|
82
|
+
function readNumber(args, index, option) {
|
|
83
|
+
const value = Number(readValue(args, index, option));
|
|
84
|
+
if (!Number.isFinite(value)) {
|
|
85
|
+
throw new Error(`Invalid numeric value for ${option}`);
|
|
86
|
+
}
|
|
87
|
+
return value;
|
|
88
|
+
}
|
|
89
|
+
function printUsage() {
|
|
90
|
+
const command = basename(process.argv[1] ?? "svg-to-png-cli.js", extname(process.argv[1] ?? ""));
|
|
91
|
+
console.log(`Usage:
|
|
92
|
+
node ${command}.js "<svg ...>" -o output.png
|
|
93
|
+
node ${command}.js input.svg -o output.png
|
|
94
|
+
|
|
95
|
+
Options:
|
|
96
|
+
-o, --output <path> Output PNG path. Defaults to output.png.
|
|
97
|
+
--width <px> Resize output width.
|
|
98
|
+
--height <px> Resize output height.
|
|
99
|
+
--fit <mode> cover, contain, fill, inside, or outside. Defaults to contain.
|
|
100
|
+
--density <dpi> SVG render density.
|
|
101
|
+
--background <color> Flatten transparent background, e.g. "#ffffff".
|
|
102
|
+
--compression-level <0-9> PNG compression level.`);
|
|
103
|
+
}
|
|
104
|
+
main(process.argv.slice(2)).catch((error) => {
|
|
105
|
+
console.error(error instanceof Error ? error.message : error);
|
|
106
|
+
process.exitCode = 1;
|
|
107
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const node_buffer = require("node:buffer");
|
|
4
|
+
const sharp = require("sharp");
|
|
5
|
+
async function renderSvgToPng(svg, options = {}) {
|
|
6
|
+
const image = sharp(node_buffer.Buffer.from(svg), {
|
|
7
|
+
density: options.density
|
|
8
|
+
});
|
|
9
|
+
if (options.width !== void 0 || options.height !== void 0) {
|
|
10
|
+
image.resize({
|
|
11
|
+
width: options.width,
|
|
12
|
+
height: options.height,
|
|
13
|
+
fit: options.fit ?? "contain"
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
if (options.background !== void 0) {
|
|
17
|
+
image.flatten({ background: options.background });
|
|
18
|
+
}
|
|
19
|
+
return image.png({
|
|
20
|
+
compressionLevel: options.compressionLevel
|
|
21
|
+
}).toBuffer();
|
|
22
|
+
}
|
|
23
|
+
async function writeSvgToPng(svg, filePath, options = {}) {
|
|
24
|
+
await sharp(await renderSvgToPng(svg, options)).toFile(filePath);
|
|
25
|
+
}
|
|
26
|
+
exports.renderSvgToPng = renderSvgToPng;
|
|
27
|
+
exports.writeSvgToPng = writeSvgToPng;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Buffer } from "node:buffer";
|
|
2
|
+
import sharp from "sharp";
|
|
3
|
+
async function renderSvgToPng(svg, options = {}) {
|
|
4
|
+
const image = sharp(Buffer.from(svg), {
|
|
5
|
+
density: options.density
|
|
6
|
+
});
|
|
7
|
+
if (options.width !== void 0 || options.height !== void 0) {
|
|
8
|
+
image.resize({
|
|
9
|
+
width: options.width,
|
|
10
|
+
height: options.height,
|
|
11
|
+
fit: options.fit ?? "contain"
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
if (options.background !== void 0) {
|
|
15
|
+
image.flatten({ background: options.background });
|
|
16
|
+
}
|
|
17
|
+
return image.png({
|
|
18
|
+
compressionLevel: options.compressionLevel
|
|
19
|
+
}).toBuffer();
|
|
20
|
+
}
|
|
21
|
+
async function writeSvgToPng(svg, filePath, options = {}) {
|
|
22
|
+
await sharp(await renderSvgToPng(svg, options)).toFile(filePath);
|
|
23
|
+
}
|
|
24
|
+
export {
|
|
25
|
+
renderSvgToPng,
|
|
26
|
+
writeSvgToPng
|
|
27
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { DeckKitFillProps, DeckKitPluginContext } from '@artifact-kit/deckkit';
|
|
2
|
+
declare module '@artifact-kit/deckkit' {
|
|
3
|
+
interface ShapeFillPropsExtension {
|
|
4
|
+
angle?: number;
|
|
5
|
+
rotateWithShape?: boolean;
|
|
6
|
+
stops?: GradientFillStop[];
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export interface GradientFillStop {
|
|
10
|
+
position: number;
|
|
11
|
+
color: string;
|
|
12
|
+
transparency?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface GradientFillProps {
|
|
15
|
+
type: 'gradient';
|
|
16
|
+
angle?: number;
|
|
17
|
+
rotateWithShape?: boolean;
|
|
18
|
+
stops: GradientFillStop[];
|
|
19
|
+
}
|
|
20
|
+
export declare function setupGradientFill(context: DeckKitPluginContext): void;
|
|
21
|
+
export declare function renderGradientFill(props: DeckKitFillProps): string | undefined;
|
|
22
|
+
//# sourceMappingURL=gradient-fill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gradient-fill.d.ts","sourceRoot":"","sources":["../../src/gradient-fill.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAEnF,OAAO,QAAQ,uBAAuB,CAAC;IACtC,UAAU,uBAAuB;QAChC,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,eAAe,CAAC,EAAE,OAAO,CAAA;QACzB,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAA;KAC1B;CACD;AAKD,MAAM,WAAW,gBAAgB;IAChC,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,UAAU,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,KAAK,EAAE,gBAAgB,EAAE,CAAA;CACzB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAErE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,GAAG,SAAS,CAa9E"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
2
|
+
export interface ImageInfo {
|
|
3
|
+
width?: number;
|
|
4
|
+
height?: number;
|
|
5
|
+
format?: string;
|
|
6
|
+
channels?: number;
|
|
7
|
+
space?: string;
|
|
8
|
+
hasAlpha?: boolean;
|
|
9
|
+
density?: number;
|
|
10
|
+
size?: number;
|
|
11
|
+
}
|
|
12
|
+
export interface CropImageOptions {
|
|
13
|
+
x: number;
|
|
14
|
+
y: number;
|
|
15
|
+
width: number;
|
|
16
|
+
height: number;
|
|
17
|
+
}
|
|
18
|
+
export interface ResizeImageOptions {
|
|
19
|
+
width?: number;
|
|
20
|
+
height?: number;
|
|
21
|
+
fit?: 'cover' | 'contain' | 'fill' | 'inside' | 'outside';
|
|
22
|
+
background?: string | {
|
|
23
|
+
r: number;
|
|
24
|
+
g: number;
|
|
25
|
+
b: number;
|
|
26
|
+
alpha?: number;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export interface SampleColorResult {
|
|
30
|
+
x: number;
|
|
31
|
+
y: number;
|
|
32
|
+
r: number;
|
|
33
|
+
g: number;
|
|
34
|
+
b: number;
|
|
35
|
+
alpha?: number;
|
|
36
|
+
}
|
|
37
|
+
export interface CompareImagesOptions {
|
|
38
|
+
background?: string | {
|
|
39
|
+
r: number;
|
|
40
|
+
g: number;
|
|
41
|
+
b: number;
|
|
42
|
+
alpha?: number;
|
|
43
|
+
};
|
|
44
|
+
gap?: number;
|
|
45
|
+
}
|
|
46
|
+
export interface OverlayImagesOptions {
|
|
47
|
+
opacity?: number;
|
|
48
|
+
background?: string | {
|
|
49
|
+
r: number;
|
|
50
|
+
g: number;
|
|
51
|
+
b: number;
|
|
52
|
+
alpha?: number;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export declare function getImageInfo(input: string | Buffer): Promise<ImageInfo>;
|
|
56
|
+
export declare function cropImage(input: string | Buffer, options: CropImageOptions): Promise<Buffer>;
|
|
57
|
+
export declare function resizeImage(input: string | Buffer, options: ResizeImageOptions): Promise<Buffer>;
|
|
58
|
+
export declare function sampleColor(input: string | Buffer, x: number, y: number): Promise<SampleColorResult>;
|
|
59
|
+
export declare function compareImages(reference: string | Buffer, generated: string | Buffer, options?: CompareImagesOptions): Promise<Buffer>;
|
|
60
|
+
export declare function overlayImages(reference: string | Buffer, generated: string | Buffer, options?: OverlayImagesOptions): Promise<Buffer>;
|
|
61
|
+
export declare function writeImage(buffer: Buffer, output: string): Promise<void>;
|
|
62
|
+
//# sourceMappingURL=image.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../src/image.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DeckKitPlugin } from '@artifact-kit/deckkit';
|
|
2
|
+
import './gradient-fill';
|
|
3
|
+
import './svg-to-custom-geometry';
|
|
4
|
+
export type { GradientFillProps, GradientFillStop } from './gradient-fill';
|
|
5
|
+
export { renderGradientFill, setupGradientFill } from './gradient-fill';
|
|
6
|
+
export type { SvgToPngFit, SvgToPngOptions } from './svg-to-png';
|
|
7
|
+
export { renderSvgToPng, writeSvgToPng } from './svg-to-png';
|
|
8
|
+
export type { SvgCustomGeometryPath, SvgToCustomGeometryOptions, SvgToCustomGeometryResult } from './svg-to-custom-geometry';
|
|
9
|
+
export { handleSvgCustomGeometry, setupSvgCustomGeometry, svgToCustomGeometry } from './svg-to-custom-geometry';
|
|
10
|
+
export type { CompareImagesOptions, CropImageOptions, ImageInfo, OverlayImagesOptions, ResizeImageOptions, SampleColorResult, } from './image';
|
|
11
|
+
export { compareImages, cropImage, getImageInfo, overlayImages, resizeImage, sampleColor, writeImage } from './image';
|
|
12
|
+
export declare function deckkitPro(): DeckKitPlugin;
|
|
13
|
+
export default deckkitPro;
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type DeckKit from '@artifact-kit/deckkit';
|
|
2
|
+
import type { DeckKitShapeHandler, DeckKitShapeHandlerContext } from '@artifact-kit/deckkit';
|
|
3
|
+
declare module '@artifact-kit/deckkit' {
|
|
4
|
+
interface CustomGeometryPropsExtension {
|
|
5
|
+
/**
|
|
6
|
+
* SVG markup to expand into one or more editable custom geometry shapes.
|
|
7
|
+
* Requires `deckkit.use(deckkitPro())` at runtime.
|
|
8
|
+
*/
|
|
9
|
+
svg?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Decimal places used when converting SVG coordinates to PPT local points.
|
|
12
|
+
* @default 5
|
|
13
|
+
*/
|
|
14
|
+
svgPrecision?: number;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export interface SvgToCustomGeometryOptions {
|
|
18
|
+
x?: number;
|
|
19
|
+
y?: number;
|
|
20
|
+
w?: number;
|
|
21
|
+
h?: number;
|
|
22
|
+
precision?: number;
|
|
23
|
+
}
|
|
24
|
+
export interface SvgCustomGeometryPath {
|
|
25
|
+
points: DeckKit.CustomGeometryPoint[];
|
|
26
|
+
fill?: DeckKit.ShapeFillProps;
|
|
27
|
+
line?: DeckKit.ShapeLineProps;
|
|
28
|
+
}
|
|
29
|
+
export interface SvgToCustomGeometryResult {
|
|
30
|
+
width: number;
|
|
31
|
+
height: number;
|
|
32
|
+
viewBox: [number, number, number, number];
|
|
33
|
+
paths: SvgCustomGeometryPath[];
|
|
34
|
+
}
|
|
35
|
+
export declare function setupSvgCustomGeometry(context: {
|
|
36
|
+
addShapeHandler: (handler: DeckKitShapeHandler) => void;
|
|
37
|
+
}): void;
|
|
38
|
+
export declare function handleSvgCustomGeometry({ target, shape, options }: DeckKitShapeHandlerContext): boolean | undefined;
|
|
39
|
+
export declare function svgToCustomGeometry(svg: string, options?: SvgToCustomGeometryOptions): SvgToCustomGeometryResult;
|
|
40
|
+
//# sourceMappingURL=svg-to-custom-geometry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svg-to-custom-geometry.d.ts","sourceRoot":"","sources":["../../src/svg-to-custom-geometry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,uBAAuB,CAAA;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAA;AAG5F,OAAO,QAAQ,uBAAuB,CAAC;IACtC,UAAU,4BAA4B;QACrC;;;WAGG;QACH,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ;;;WAGG;QACH,YAAY,CAAC,EAAE,MAAM,CAAA;KACrB;CACD;AAED,MAAM,WAAW,0BAA0B;IAC1C,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,qBAAqB;IACrC,MAAM,EAAE,OAAO,CAAC,mBAAmB,EAAE,CAAA;IACrC,IAAI,CAAC,EAAE,OAAO,CAAC,cAAc,CAAA;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC,cAAc,CAAA;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACzC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,KAAK,EAAE,qBAAqB,EAAE,CAAA;CAC9B;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAAE,eAAe,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAA;CAAE,GAAG,IAAI,CAEjH;AAED,wBAAgB,uBAAuB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,0BAA0B,GAAG,OAAO,GAAG,SAAS,CA4BnH;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,0BAA+B,GAAG,yBAAyB,CA6BpH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svg-to-png-cli.d.ts","sourceRoot":"","sources":["../../src/svg-to-png-cli.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
2
|
+
export type SvgToPngFit = 'cover' | 'contain' | 'fill' | 'inside' | 'outside';
|
|
3
|
+
export interface SvgToPngOptions {
|
|
4
|
+
width?: number;
|
|
5
|
+
height?: number;
|
|
6
|
+
fit?: SvgToPngFit;
|
|
7
|
+
density?: number;
|
|
8
|
+
background?: string | {
|
|
9
|
+
r: number;
|
|
10
|
+
g: number;
|
|
11
|
+
b: number;
|
|
12
|
+
alpha?: number;
|
|
13
|
+
};
|
|
14
|
+
compressionLevel?: number;
|
|
15
|
+
}
|
|
16
|
+
export declare function renderSvgToPng(svg: string, options?: SvgToPngOptions): Promise<Buffer>;
|
|
17
|
+
export declare function writeSvgToPng(svg: string, filePath: string, options?: SvgToPngOptions): Promise<void>;
|
|
18
|
+
//# sourceMappingURL=svg-to-png.d.ts.map
|
|
@@ -0,0 +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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@artifact-kit/deckkit-pro",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Commercial DeckKit plugin bundle.",
|
|
5
|
+
"license": "SEE LICENSE IN COMMERCIAL-LICENSE.md",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"author": {
|
|
8
|
+
"name": "Artifact Kit"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://github.com/artifact-kit/artifact-kit#readme",
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "git+https://github.com/artifact-kit/artifact-kit.git",
|
|
14
|
+
"directory": "packages/deckkit-pro"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"artifact-kit",
|
|
18
|
+
"deckkit",
|
|
19
|
+
"pptx",
|
|
20
|
+
"powerpoint",
|
|
21
|
+
"presentation"
|
|
22
|
+
],
|
|
23
|
+
"main": "./dist/index.cjs",
|
|
24
|
+
"module": "./dist/index.js",
|
|
25
|
+
"types": "./dist/types/index.d.ts",
|
|
26
|
+
"bin": {
|
|
27
|
+
"deckkit-pro": "dist/cli.js",
|
|
28
|
+
"deckkit-svg-to-png": "dist/svg-to-png-cli.js"
|
|
29
|
+
},
|
|
30
|
+
"exports": {
|
|
31
|
+
".": {
|
|
32
|
+
"types": "./dist/types/index.d.ts",
|
|
33
|
+
"import": "./dist/index.js",
|
|
34
|
+
"require": "./dist/index.cjs"
|
|
35
|
+
},
|
|
36
|
+
"./gradient-fill": {
|
|
37
|
+
"types": "./dist/types/gradient-fill.d.ts",
|
|
38
|
+
"import": "./dist/gradient-fill.js",
|
|
39
|
+
"require": "./dist/gradient-fill.cjs"
|
|
40
|
+
},
|
|
41
|
+
"./image": {
|
|
42
|
+
"types": "./dist/types/image.d.ts",
|
|
43
|
+
"import": "./dist/image.js",
|
|
44
|
+
"require": "./dist/image.cjs"
|
|
45
|
+
},
|
|
46
|
+
"./svg-to-custom-geometry": {
|
|
47
|
+
"types": "./dist/types/svg-to-custom-geometry.d.ts",
|
|
48
|
+
"import": "./dist/svg-to-custom-geometry.js",
|
|
49
|
+
"require": "./dist/svg-to-custom-geometry.cjs"
|
|
50
|
+
},
|
|
51
|
+
"./svg-to-png": {
|
|
52
|
+
"types": "./dist/types/svg-to-png.d.ts",
|
|
53
|
+
"import": "./dist/svg-to-png.js",
|
|
54
|
+
"require": "./dist/svg-to-png.cjs"
|
|
55
|
+
},
|
|
56
|
+
"./cli": {
|
|
57
|
+
"types": "./dist/types/cli.d.ts",
|
|
58
|
+
"import": "./dist/cli.js",
|
|
59
|
+
"require": "./dist/cli.cjs"
|
|
60
|
+
},
|
|
61
|
+
"./svg-to-png-cli": {
|
|
62
|
+
"types": "./dist/types/svg-to-png-cli.d.ts",
|
|
63
|
+
"import": "./dist/svg-to-png-cli.js",
|
|
64
|
+
"require": "./dist/svg-to-png-cli.cjs"
|
|
65
|
+
},
|
|
66
|
+
"./package.json": "./package.json"
|
|
67
|
+
},
|
|
68
|
+
"files": [
|
|
69
|
+
"dist",
|
|
70
|
+
"README.md",
|
|
71
|
+
"COMMERCIAL-LICENSE.md"
|
|
72
|
+
],
|
|
73
|
+
"scripts": {
|
|
74
|
+
"build": "vite build && tsc -p tsconfig.types.json",
|
|
75
|
+
"clean": "rm -rf dist",
|
|
76
|
+
"prepublishOnly": "pnpm typecheck && pnpm test && pnpm build",
|
|
77
|
+
"typecheck": "tsc --noEmit",
|
|
78
|
+
"test": "tsc -p tsconfig.test.json && node test/paper-svg-path.test.cjs"
|
|
79
|
+
},
|
|
80
|
+
"peerDependencies": {
|
|
81
|
+
"@artifact-kit/deckkit": "^0.1.0"
|
|
82
|
+
},
|
|
83
|
+
"dependencies": {
|
|
84
|
+
"paper-jsdom": "^0.12.18",
|
|
85
|
+
"sharp": "^0.33.5"
|
|
86
|
+
},
|
|
87
|
+
"devDependencies": {
|
|
88
|
+
"@artifact-kit/deckkit": "workspace:*",
|
|
89
|
+
"@types/node": "^22.8.1",
|
|
90
|
+
"typescript": "^5.6.3",
|
|
91
|
+
"vite": "^5.4.0"
|
|
92
|
+
},
|
|
93
|
+
"publishConfig": {
|
|
94
|
+
"access": "public",
|
|
95
|
+
"registry": "https://registry.npmjs.org/"
|
|
96
|
+
}
|
|
97
|
+
}
|