diff --git a/library/CHANGES.md b/library/CHANGES.md new file mode 100644 index 0000000000..0a9be39b6a --- /dev/null +++ b/library/CHANGES.md @@ -0,0 +1,11 @@ +# CHANGELOG + +## 1.0.1 + +- Make the library generate a .penpot file compatible with penpot 2.7.x + + +## 1.0.0 + +- Initial release after big refactor (from the first MVP prototype) + diff --git a/library/package.json b/library/package.json index de2605bda9..c3ac96ac45 100644 --- a/library/package.json +++ b/library/package.json @@ -1,6 +1,6 @@ { "name": "@penpot/library", - "version": "1.0.0", + "version": "1.0.1", "license": "MPL-2.0", "author": "Kaleidos INC", "packageManager": "yarn@4.9.1+sha512.f95ce356460e05be48d66401c1ae64ef84d163dd689964962c6888a9810865e39097a5e9de748876c2e0bf89b232d583c33982773e9903ae7a76257270986538", diff --git a/library/playground/sample2.js b/library/playground/sample2.js new file mode 100644 index 0000000000..96cccde0d4 --- /dev/null +++ b/library/playground/sample2.js @@ -0,0 +1,106 @@ +import * as penpot from "#self"; +import { writeFile, readFile } from "fs/promises"; +import { createWriteStream } from "fs"; +import { Writable } from "stream"; + +// console.log(penpot); + +(async function () { + const context = penpot.createBuildContext(); + + { + context.addFile({ name: "Test File 1" }); + context.addPage({ name: "Foo Page" }); + + // Add image media + const buffer = await readFile("./playground/sample.jpg"); + const blob = new Blob([buffer], { type: "image/jpeg" }); + + const mediaId = context.addFileMedia( + { + name: "avatar.jpg", + width: 512, + height: 512, + }, + blob + ); + + // Add image color asset + const assetColorId = context.addLibraryColor({ + name: "Avatar", + opacity: 1, + image: { + ...context.getMediaAsImage(mediaId), + keepAspectRatio: true, + }, + }); + + const boardId = context.addBoard({ + name: "Foo Board", + x: 0, + y: 0, + width: 500, + height: 1000, + }); + + const fill = { + fillColorRefId: assetColorId, + fillColorRefFile: context.currentFileId, + fillImage: { + ...context.getMediaAsImage(mediaId), + keepAspectRatio: true, + }, + }; + + const stroke = { + strokeColorRefId: assetColorId, + strokeColorRefFile: context.currentFileId, + strokeWidth: 48, + strokeAlignment: "inner", + strokeStyle: "solid", + strokeOpacity: 1, + strokeImage: { + ...context.getMediaAsImage(mediaId), + keepAspectRatio: true, + }, + }; + + context.addRect({ + name: "Rect 1", + x: 20, + y: 20, + width: 500, + height: 1000, + fills: [fill], + strokes: [stroke], + }); + + context.closeBoard(); + context.closeFile(); + } + + { + let result = await penpot.exportAsBytes(context); + await writeFile("sample-sync.zip", result); + } + + // { + // // Create a file stream to write the zip to + // const output = createWriteStream('sample-stream.zip'); + // // Wrap Node's stream in a WHATWG WritableStream + // const writable = Writable.toWeb(output); + // await penpot.exportStream(context, writable); + // } +})() + .catch((cause) => { + console.error(cause); + + const innerCause = cause.cause; + if (innerCause) { + console.error("Inner cause:", innerCause); + } + process.exit(-1); + }) + .finally(() => { + process.exit(0); + }); diff --git a/library/playground/sample3.js b/library/playground/sample3.js new file mode 100644 index 0000000000..df35e6d8cd --- /dev/null +++ b/library/playground/sample3.js @@ -0,0 +1,68 @@ +import * as penpot from "#self"; +import { writeFile, readFile } from "fs/promises"; + +(async function () { + const context = penpot.createBuildContext(); + + { + context.addFile({ name: "Test File 1" }); + context.addPage({ name: "Foo Page" }); + + const pathContent = [ + { + "command": "move-to", + "params": { + "x": 480.0, + "y": 839.0 + } + }, + { + "command": "line-to", + "params": { + "x": 439.0, + "y": 802.0 + } + }, + { + "command": "curve-to", + "params": { + "c1x": 368.0, + "c1y": 737.0, + "c2x": 310.0, + "c2y": 681.0, + "x": 264.0, + "y": 634.0 + } + }, + { + "command": "close-path", + "params": {} + } + ]; + + context.addPath({ + name: "Path 1", + content: pathContent + }); + + context.closeBoard(); + context.closeFile(); + } + + { + let result = await penpot.exportAsBytes(context); + await writeFile("sample-path.zip", result); + } +})() + .catch((cause) => { + console.error(cause); + + const innerCause = cause.cause; + if (innerCause) { + console.error("Inner cause:", innerCause); + } + process.exit(-1); + }) + .finally(() => { + process.exit(0); + });