{"_id":"@burnmark-io/designer-core","_rev":"5-e057c7afce7bf98d4b7fad61aa8e8ed8","name":"@burnmark-io/designer-core","dist-tags":{"latest":"0.5.1"},"versions":{"0.0.1":{"name":"@burnmark-io/designer-core","version":"0.0.1","keywords":["label","thermal","printer","designer","barcode","qrcode","brother-ql","dymo","zebra","headless"],"author":{"name":"Mannes Brak"},"license":"MIT","_id":"@burnmark-io/designer-core@0.0.1","maintainers":[{"name":"bankersman","email":"broodje@warmvle.es"}],"homepage":"https://burnmark-io.github.io/designer-core/","bugs":{"url":"https://github.com/burnmark-io/designer-core/issues"},"dist":{"shasum":"a5e32bf2e290d6e236a4a6958c281f2ce44fb2fa","tarball":"https://registry.npmjs.org/@burnmark-io/designer-core/-/designer-core-0.0.1.tgz","fileCount":127,"integrity":"sha512-YG9NFdZ5/xeKeeYvV6ZJT4eRQsO/GyoYgmpHLvtbHvBfOKpkFUcNxvWzlV0lAg8vfQpA+RdpEM/eyUZ45JOi7Q==","signatures":[{"sig":"MEQCIHAZpNmSnY3c/ifzXPSMYYWyIpRIFSLtBliVNDbPs1n1AiAUafmSifVpwtmyHYOimtTrcvDQDif2iWch36onjMIk3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":211140},"type":"module","_from":"file:burnmark-io-designer-core-0.0.1.tgz","types":"./src/index.ts","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./dist/index.js"}},"funding":[{"url":"https://github.com/sponsors/mannes","type":"github"},{"url":"https://ko-fi.com/mannes","type":"ko-fi"}],"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc -p tsconfig.json --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"bankersman","email":"broodje@warmvle.es"},"_resolved":"/tmp/02618762aed0fef174e44819c02f823d/burnmark-io-designer-core-0.0.1.tgz","_integrity":"sha512-YG9NFdZ5/xeKeeYvV6ZJT4eRQsO/GyoYgmpHLvtbHvBfOKpkFUcNxvWzlV0lAg8vfQpA+RdpEM/eyUZ45JOi7Q==","repository":{"url":"git+https://github.com/burnmark-io/designer-core.git","type":"git","directory":"packages/core"},"_npmVersion":"11.9.0","description":"Headless label design engine — document model, render pipeline, multi-colour flattening, templates, CSV batch","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","dependencies":{"jspdf":"^3.0.0","jszip":"^3.10.0","bwip-js":"^4.0.0","papaparse":"^5.5.0","@mbtech-nl/bitmap":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"~5.5.0","@types/node":"^22.0.0","@napi-rs/canvas":"^0.1.0","@types/papaparse":"^5.3.0","@mbtech-nl/tsconfig":"^1.0.0","@vitest/coverage-v8":"^2.0.0"},"peerDependencies":{"@napi-rs/canvas":"^0.1.0"},"peerDependenciesMeta":{"@napi-rs/canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/designer-core_0.0.1_1776993785466_0.36402864445632077","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@burnmark-io/designer-core","version":"0.1.0","keywords":["label","thermal","printer","designer","barcode","qrcode","brother-ql","dymo","zebra","headless"],"author":{"name":"Mannes Brak"},"license":"MIT","_id":"@burnmark-io/designer-core@0.1.0","maintainers":[{"name":"bankersman","email":"broodje@warmvle.es"}],"homepage":"https://burnmark-io.github.io/designer-core/","bugs":{"url":"https://github.com/burnmark-io/designer-core/issues"},"dist":{"shasum":"9c35d816c6194e18ac95a6fde3c4977af4b292a3","tarball":"https://registry.npmjs.org/@burnmark-io/designer-core/-/designer-core-0.1.0.tgz","fileCount":135,"integrity":"sha512-eJk/ooFwRjgGPDbzwewsO069LXp1H1D48qoZmvn326iDx2Zx8NEQY96xbtYD5Ff1yzAl5rsNbd4MT1/bVu5JdQ==","signatures":[{"sig":"MEUCIBocj/5gmieBrF/7bxN9/uFRQqfP/p+vrN5j5BGn0Bf0AiEA9AUSrY5XhTWq+3BAvWfMDb4odKo0kKaLODsLJQ10iaI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@burnmark-io%2fdesigner-core@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":635355},"type":"module","_from":"file:burnmark-io-designer-core-0.1.0.tgz","types":"./src/index.ts","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./dist/index.js"}},"funding":[{"url":"https://github.com/sponsors/mannes","type":"github"},{"url":"https://ko-fi.com/mannes","type":"ko-fi"}],"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/copy-assets.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2e2c23b7-34f4-41c8-97ba-9c0534a22059"}},"_resolved":"/tmp/06eebef62c80d80cbd59f3950d9191d0/burnmark-io-designer-core-0.1.0.tgz","_integrity":"sha512-eJk/ooFwRjgGPDbzwewsO069LXp1H1D48qoZmvn326iDx2Zx8NEQY96xbtYD5Ff1yzAl5rsNbd4MT1/bVu5JdQ==","repository":{"url":"git+https://github.com/burnmark-io/designer-core.git","type":"git","directory":"packages/core"},"_npmVersion":"11.11.0","description":"Headless label design engine — document model, render pipeline, multi-colour flattening, templates, CSV batch","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"jspdf":"^3.0.0","jszip":"^3.10.0","bwip-js":"^4.0.0","papaparse":"^5.5.0","@mbtech-nl/bitmap":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"~5.5.0","@types/node":"^22.0.0","@napi-rs/canvas":"^0.1.0","@types/papaparse":"^5.3.0","@mbtech-nl/tsconfig":"^1.0.0","@vitest/coverage-v8":"^2.0.0"},"peerDependencies":{"@napi-rs/canvas":"^0.1.0"},"peerDependenciesMeta":{"@napi-rs/canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/designer-core_0.1.0_1777075576566_0.856037117977027","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@burnmark-io/designer-core","version":"0.2.0","keywords":["label","thermal","printer","designer","barcode","qrcode","brother-ql","dymo","zebra","headless"],"author":{"name":"Mannes Brak"},"license":"MIT","_id":"@burnmark-io/designer-core@0.2.0","maintainers":[{"name":"bankersman","email":"broodje@warmvle.es"}],"homepage":"https://burnmark-io.github.io/designer-core/","bugs":{"url":"https://github.com/burnmark-io/designer-core/issues"},"dist":{"shasum":"9d65ec93a0516f406a92cf26436441446c72ca15","tarball":"https://registry.npmjs.org/@burnmark-io/designer-core/-/designer-core-0.2.0.tgz","fileCount":139,"integrity":"sha512-8ro5VtwqLcw0WWC/2YlrTvrBsYuItgBQ1LmWVEs1ysQiPALYCwFv0xbuG+YnyyXoBRWPh3qjJF3OCjADvyMdvg==","signatures":[{"sig":"MEYCIQDtlb4Lfbhv64NLCX6X0Fx+TdpLRPm5bz0fNPSY/ENj5gIhANHOVPxFKkymLEnkoxAOPDEYaMPMdK0x+XRW7WsWBHZ5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@burnmark-io%2fdesigner-core@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":643273},"type":"module","_from":"file:burnmark-io-designer-core-0.2.0.tgz","types":"./src/index.ts","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./dist/index.js"}},"funding":[{"url":"https://github.com/sponsors/mannes","type":"github"},{"url":"https://ko-fi.com/mannes","type":"ko-fi"}],"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/copy-assets.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2e2c23b7-34f4-41c8-97ba-9c0534a22059"}},"_resolved":"/tmp/e8447e23c7a3675383be6e6041beae16/burnmark-io-designer-core-0.2.0.tgz","_integrity":"sha512-8ro5VtwqLcw0WWC/2YlrTvrBsYuItgBQ1LmWVEs1ysQiPALYCwFv0xbuG+YnyyXoBRWPh3qjJF3OCjADvyMdvg==","repository":{"url":"git+https://github.com/burnmark-io/designer-core.git","type":"git","directory":"packages/core"},"_npmVersion":"11.11.0","description":"Headless label design engine — document model, render pipeline, multi-colour flattening, templates, CSV batch","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"jspdf":"^3.0.0","jszip":"^3.10.0","bwip-js":"^4.0.0","papaparse":"^5.5.0","@mbtech-nl/bitmap":"^1.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"~5.5.0","@types/node":"^22.0.0","@napi-rs/canvas":"^0.1.0","@types/papaparse":"^5.3.0","@mbtech-nl/tsconfig":"^1.0.1","@vitest/coverage-v8":"^2.0.0"},"peerDependencies":{"@napi-rs/canvas":"^0.1.0"},"peerDependenciesMeta":{"@napi-rs/canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/designer-core_0.2.0_1777318553489_0.4279152205485264","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@burnmark-io/designer-core","version":"0.5.0","keywords":["label","thermal","printer","designer","barcode","qrcode","brother-ql","dymo","zebra","headless"],"author":{"name":"Mannes Brak"},"license":"MIT","_id":"@burnmark-io/designer-core@0.5.0","maintainers":[{"name":"bankersman","email":"broodje@warmvle.es"}],"homepage":"https://burnmark-io.github.io/designer-core/","bugs":{"url":"https://github.com/burnmark-io/designer-core/issues"},"dist":{"shasum":"c74b31d17e5e59654fef80699640b791ad7d75b6","tarball":"https://registry.npmjs.org/@burnmark-io/designer-core/-/designer-core-0.5.0.tgz","fileCount":139,"integrity":"sha512-W25WqWTr9y2Yf8MdjowQcmVLLx3PJYQqrFseTx4bGCrOmiB50037DJ6TRvon6h3NHvcE4I4dr4RJDleMLsNObQ==","signatures":[{"sig":"MEYCIQD1chzibTpmfLRYmFchAN8Q5gpgKmsOIuZ7IZkXcK05yAIhAIqbqCm81pxR6uhWvc3inRyhPCyG7Cqe8PTrZAjAtLRM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@burnmark-io%2fdesigner-core@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":643279},"type":"module","_from":"file:burnmark-io-designer-core-0.5.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"funding":[{"url":"https://github.com/sponsors/mannes","type":"github"},{"url":"https://ko-fi.com/mannes","type":"ko-fi"}],"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/copy-assets.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2e2c23b7-34f4-41c8-97ba-9c0534a22059"}},"_resolved":"/tmp/69a70c1c6cdb7de48a54c090671ab496/burnmark-io-designer-core-0.5.0.tgz","_integrity":"sha512-W25WqWTr9y2Yf8MdjowQcmVLLx3PJYQqrFseTx4bGCrOmiB50037DJ6TRvon6h3NHvcE4I4dr4RJDleMLsNObQ==","repository":{"url":"git+https://github.com/burnmark-io/designer-core.git","type":"git","directory":"packages/core"},"_npmVersion":"11.11.0","description":"Headless label design engine — document model, render pipeline, multi-colour flattening, templates, CSV batch","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"jspdf":"^3.0.0","jszip":"^3.10.0","bwip-js":"^4.0.0","papaparse":"^5.5.0","@mbtech-nl/bitmap":"^1.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"~5.5.0","@types/node":"^22.0.0","@napi-rs/canvas":"^0.1.0","@types/papaparse":"^5.3.0","@mbtech-nl/tsconfig":"^1.0.1","@vitest/coverage-v8":"^2.0.0"},"peerDependencies":{"@napi-rs/canvas":"^0.1.0"},"peerDependenciesMeta":{"@napi-rs/canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/designer-core_0.5.0_1777837874704_0.5981736778597875","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@burnmark-io/designer-core","version":"0.5.1","description":"Headless label design engine — document model, render pipeline, multi-colour flattening, templates, CSV batch","type":"module","author":{"name":"Mannes Brak"},"license":"MIT","homepage":"https://burnmark-io.github.io/designer-core/","repository":{"type":"git","url":"git+https://github.com/burnmark-io/designer-core.git","directory":"packages/core"},"bugs":{"url":"https://github.com/burnmark-io/designer-core/issues"},"funding":[{"type":"github","url":"https://github.com/sponsors/mannes"},{"type":"ko-fi","url":"https://ko-fi.com/mannes"}],"keywords":["label","thermal","printer","designer","barcode","qrcode","brother-ql","dymo","zebra","headless"],"engines":{"node":">=24.0.0"},"publishConfig":{"access":"public"},"sideEffects":false,"types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"dependencies":{"@mbtech-nl/bitmap":"^1.3.0","bwip-js":"^4.0.0","jspdf":"^3.0.0","jszip":"^3.10.0","papaparse":"^5.5.0"},"peerDependencies":{"@napi-rs/canvas":"^0.1.0"},"peerDependenciesMeta":{"@napi-rs/canvas":{"optional":true}},"devDependencies":{"@mbtech-nl/tsconfig":"^1.0.1","@napi-rs/canvas":"^0.1.0","@types/node":"^22.0.0","@types/papaparse":"^5.3.0","@vitest/coverage-v8":"^2.0.0","typescript":"~5.5.0","vitest":"^2.0.0"},"scripts":{"build":"tsc -p tsconfig.build.json && node scripts/copy-assets.mjs","typecheck":"tsc -p tsconfig.json --noEmit","test":"vitest run","test:coverage":"vitest run --coverage"},"_id":"@burnmark-io/designer-core@0.5.1","_integrity":"sha512-hnRnRNVJJMtQZ0c0NApmeBsG6ee+nfylUAlhPOOPpjRTWEe9WDBt+WkwQvoG5mcn5FuPGC8Fwnr5PDvsC6ywfw==","_resolved":"/tmp/595b24ffa64843aee6de2b7e843b7013/burnmark-io-designer-core-0.5.1.tgz","_from":"file:burnmark-io-designer-core-0.5.1.tgz","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-hnRnRNVJJMtQZ0c0NApmeBsG6ee+nfylUAlhPOOPpjRTWEe9WDBt+WkwQvoG5mcn5FuPGC8Fwnr5PDvsC6ywfw==","shasum":"5c113f6d3381f5e7f504a33eebf09fc9de050b5c","tarball":"https://registry.npmjs.org/@burnmark-io/designer-core/-/designer-core-0.5.1.tgz","fileCount":139,"unpackedSize":644721,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@burnmark-io%2fdesigner-core@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC2M3fAwV3rApEOLXTXoPoz1bdgIX2TEKXVeWOhF7oZPQIhALbvcSZHrN5fEp65MWQ44k43atgNf9RLsNSR/etjFpHv"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2e2c23b7-34f4-41c8-97ba-9c0534a22059"}},"directories":{},"maintainers":[{"name":"bankersman","email":"broodje@warmvle.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/designer-core_0.5.1_1777910503424_0.43883112876912045"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-24T01:23:05.348Z","modified":"2026-05-04T16:01:43.943Z","0.0.1":"2026-04-24T01:23:05.608Z","0.1.0":"2026-04-25T00:06:16.797Z","0.2.0":"2026-04-27T19:35:53.827Z","0.5.0":"2026-05-03T19:51:14.885Z","0.5.1":"2026-05-04T16:01:43.651Z"},"bugs":{"url":"https://github.com/burnmark-io/designer-core/issues"},"author":{"name":"Mannes Brak"},"license":"MIT","homepage":"https://burnmark-io.github.io/designer-core/","keywords":["label","thermal","printer","designer","barcode","qrcode","brother-ql","dymo","zebra","headless"],"repository":{"type":"git","url":"git+https://github.com/burnmark-io/designer-core.git","directory":"packages/core"},"description":"Headless label design engine — document model, render pipeline, multi-colour flattening, templates, CSV batch","maintainers":[{"name":"bankersman","email":"broodje@warmvle.es"}],"readme":"# @burnmark-io/designer-core\n\n[![npm version](https://img.shields.io/npm/v/@burnmark-io/designer-core.svg)](https://www.npmjs.com/package/@burnmark-io/designer-core)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](../../LICENSE)\n\nHeadless, framework-agnostic label design engine. Runs identically in\nNode.js 24 and all modern browsers.\n\n## Install\n\n```bash\npnpm add @burnmark-io/designer-core\n```\n\n**Requirements:** Node.js 24+, or a modern browser with `OffscreenCanvas`\n(Safari 16.4+, Chrome 69+, Firefox 105+).\n\nFor Node.js rendering, add the optional peer dependency:\n\n```bash\npnpm add @napi-rs/canvas\n```\n\n## Key exports\n\n```ts\nimport {\n  // Main class\n  LabelDesigner,\n\n  // Document model\n  type LabelDocument,\n  type CanvasConfig,\n  type LabelObject,\n  type TextObject,\n  type ImageObject,\n  type BarcodeObject,\n  type ShapeObject,\n  type GroupObject,\n  type BarcodeFormat,\n\n  // Colour pipeline\n  type PrinterCapabilities,\n  type PrinterColor,\n  SINGLE_COLOR,\n  TWO_COLOR_BLACK_RED,\n  flattenForPrinter,\n\n  // Template engine\n  applyTemplate,\n  extractPlaceholders,\n  validateVariables,\n  parseCsv,\n  renderBatch,\n\n  // Barcodes\n  QRContent,\n\n  // Storage / printer adapter interfaces\n  type LabelStore,\n  type LabelSummary,\n  type AssetStore,\n  type PrinterAdapter,\n  type PrinterStatus,\n  type PrintOptions,\n\n  // Fonts\n  registerFont,\n  listFonts,\n  isFontLoaded,\n\n  // Migration\n  migrateDocument,\n} from '@burnmark-io/designer-core';\n```\n\n## Document model\n\nA `LabelDocument` is plain JSON — a canvas configuration plus a list of\nobjects (text, image, barcode, shape, group). Every object has a CSS\n`color` string; the design is colour-honest and flattening to printer\ncapabilities happens at output time.\n\nSee [the colour model guide](https://burnmark-io.github.io/designer-core/guide/colour-model)\nfor the full story.\n\n## Render pipeline\n\n```\nLabelDocument → apply variables → render to Canvas → @mbtech-nl/bitmap → LabelBitmap\n```\n\nFor multi-colour printers, `renderPlanes(capabilities)` returns a\n`Map<string, LabelBitmap>` — one 1bpp bitmap per colour plane.\n\n## Scripting quick start\n\n```ts\nimport { LabelDesigner, SINGLE_COLOR } from '@burnmark-io/designer-core';\n\nconst designer = new LabelDesigner({\n  canvas: { widthDots: 696, heightDots: 0, dpi: 300 },\n});\n\ndesigner.add({\n  type: 'text',\n  x: 10,\n  y: 10,\n  width: 676,\n  height: 40,\n  rotation: 0,\n  opacity: 1,\n  locked: false,\n  visible: true,\n  color: '#000000',\n  content: 'Order #{{order_id}}',\n  fontFamily: 'Burnmark Sans',\n  fontSize: 24,\n  fontWeight: 'bold',\n  fontStyle: 'normal',\n  textAlign: 'left',\n  verticalAlign: 'top',\n  letterSpacing: 0,\n  lineHeight: 1.2,\n  invert: false,\n  wrap: true,\n  autoHeight: false,\n});\n\nconst planes = await designer.renderPlanes(SINGLE_COLOR, { order_id: '12345' });\n// planes.get('black') → LabelBitmap ready for the printer\n```\n\n## Barcodes\n\n50+ formats via `bwip-js`. See the\n[barcode reference](https://burnmark-io.github.io/designer-core/reference/barcode-formats)\nfor the full list with examples. Quick helpers for QR content:\n\n```ts\nimport { QRContent } from '@burnmark-io/designer-core';\n\nQRContent.wifi('MyNetwork', 'hunter2');\nQRContent.url('https://example.com');\nQRContent.vcard({ firstName: 'Piet', lastName: 'Brak', ... });\n```\n\n## Template engine\n\nAny string field (text content, barcode data) supports `{{placeholder}}`\nsubstitution. Feed CSV data to `renderBatch` for bulk label generation.\n\n```ts\nimport { renderBatch, parseCsv } from '@burnmark-io/designer-core';\n\nconst csv = await parseCsv(fileContents);\nfor await (const result of renderBatch(designer, csv.rows)) {\n  // result.planes.get('black') → one bitmap per row\n}\n```\n\n## Fonts — replacing placeholder files\n\nThe package includes four `Burnmark *` font family names that map to\nOFL-licensed typefaces (Inter, JetBrains Mono, Bitter, Barlow Condensed).\nFor a production deployment, drop WOFF2 subsets into `src/fonts/bundled/`\n— the loader picks them up automatically. See [D4 in DECISIONS.md](../../DECISIONS.md).\n\n## License\n\nMIT © Mannes Brak\n","readmeFilename":"README.md"}