{"_id":"@burnmark-io/sheet-templates","_rev":"2-e173ae91d33efa82ef8e427436bbd53f","name":"@burnmark-io/sheet-templates","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@burnmark-io/sheet-templates","version":"0.1.0","keywords":["labels","stickers","avery","herma","zweckform","sheets","templates","burnmark"],"author":{"name":"Mannes Brak"},"license":"MIT","_id":"@burnmark-io/sheet-templates@0.1.0","maintainers":[{"name":"bankersman","email":"broodje@warmvle.es"}],"homepage":"https://github.com/burnmark-io/sheet-templates","bugs":{"url":"https://github.com/burnmark-io/sheet-templates/issues"},"dist":{"shasum":"d86beb79ccaacf07d3e9c9df9d3b66f7203ddb77","tarball":"https://registry.npmjs.org/@burnmark-io/sheet-templates/-/sheet-templates-0.1.0.tgz","fileCount":13,"integrity":"sha512-Tvf5/b5GYRFRNUmGAmrJt+cae5vKnZVoWWRNtQYCTeOf8ic2aOXnBimwpgja5HQZ8ZAAnriZX4KfTu4PpM26iQ==","signatures":[{"sig":"MEQCIGQaX6AyRDz15lXVhUxd4vjGZEZFT1wh9waVC3nSPE82AiBnJUkA1HaRK+A/DUhqlRa8VK1J/APSRmLWDZD7Djn72Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":945043},"type":"module","_from":"file:burnmark-io-sheet-templates-0.1.0.tgz","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":{"lint":"eslint src scripts","test":"vitest run","build":"tsc -p tsconfig.build.json && cp src/templates.json dist/templates.json","format":"prettier --write src scripts","convert":"tsx scripts/convert.ts","typecheck":"tsc -p tsconfig.json --noEmit","convert:stats":"tsx scripts/convert.ts --stats","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"bankersman","email":"broodje@warmvle.es"},"prettier":"@mbtech-nl/prettier-config","_resolved":"/tmp/698f22e9aeb5a1054b1574d431793cae/burnmark-io-sheet-templates-0.1.0.tgz","_integrity":"sha512-Tvf5/b5GYRFRNUmGAmrJt+cae5vKnZVoWWRNtQYCTeOf8ic2aOXnBimwpgja5HQZ8ZAAnriZX4KfTu4PpM26iQ==","repository":{"url":"git+https://github.com/burnmark-io/sheet-templates.git","type":"git"},"_npmVersion":"11.9.0","description":"Sticker sheet template registry — Avery, Herma, Zweckform, and hundreds more","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","eslint":"^9.0.0","vitest":"^2.0.0","prettier":"^3.0.0","typescript":"~5.5.0","@types/node":"^25.6.0","fast-xml-parser":"^4.0.0","@mbtech-nl/tsconfig":"^1.0.0","@vitest/coverage-v8":"^2.0.0","@mbtech-nl/eslint-config":"^1.0.0","@mbtech-nl/prettier-config":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sheet-templates_0.1.0_1777032780225_0.7669433921569568","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@burnmark-io/sheet-templates","version":"0.1.1","description":"Sticker sheet template registry — Avery, Herma, Zweckform, and hundreds more","keywords":["labels","stickers","avery","herma","zweckform","sheets","templates","burnmark"],"type":"module","author":{"name":"Mannes Brak"},"license":"MIT","homepage":"https://github.com/burnmark-io/sheet-templates","repository":{"type":"git","url":"git+https://github.com/burnmark-io/sheet-templates.git"},"bugs":{"url":"https://github.com/burnmark-io/sheet-templates/issues"},"engines":{"node":">=24.0.0"},"publishConfig":{"access":"public"},"sideEffects":false,"exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"prettier":"@mbtech-nl/prettier-config","devDependencies":{"@mbtech-nl/eslint-config":"^1.0.0","@mbtech-nl/prettier-config":"^1.0.0","@mbtech-nl/tsconfig":"^1.0.0","@types/node":"^25.6.0","@vitest/coverage-v8":"^2.0.0","eslint":"^9.0.0","fast-xml-parser":"^4.0.0","prettier":"^3.0.0","tsx":"^4.0.0","typescript":"~5.5.0","vitest":"^2.0.0"},"scripts":{"convert":"tsx scripts/convert.ts","convert:stats":"tsx scripts/convert.ts --stats","build":"tsc -p tsconfig.build.json && cp src/templates.json dist/templates.json","typecheck":"tsc -p tsconfig.json --noEmit","test":"vitest run","test:coverage":"vitest run --coverage","lint":"eslint src scripts","format":"prettier --write src scripts"},"_id":"@burnmark-io/sheet-templates@0.1.1","_integrity":"sha512-WgIcfpsTjUkChLM0T+XQSJJF04NiFeE2UxEgRnuld7zRcBe70qLpN9/Zx3q0KhrcknlAo7lh/LvvHnTe87UKUQ==","_resolved":"/tmp/8cdfe5ff8fc0b6fb162a08d8c307e6ef/burnmark-io-sheet-templates-0.1.1.tgz","_from":"file:burnmark-io-sheet-templates-0.1.1.tgz","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-WgIcfpsTjUkChLM0T+XQSJJF04NiFeE2UxEgRnuld7zRcBe70qLpN9/Zx3q0KhrcknlAo7lh/LvvHnTe87UKUQ==","shasum":"8de5bb71127ef43401f061759ea7cc48b61df6df","tarball":"https://registry.npmjs.org/@burnmark-io/sheet-templates/-/sheet-templates-0.1.1.tgz","fileCount":13,"unpackedSize":944861,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@burnmark-io%2fsheet-templates@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDIftOa/nM/hVeheq7AHKaxeZpmQd/h+a9xnq6K7WVYSAIhALu4W27kRfQReqijELtUrnPGek9B5TwOzUYXMh4ENVYf"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2bd5c5d4-2bd7-4af0-9e8f-168e61d0d8c6"}},"directories":{},"maintainers":[{"name":"bankersman","email":"broodje@warmvle.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sheet-templates_0.1.1_1777309826090_0.766915350444346"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-24T12:13:00.147Z","modified":"2026-04-27T17:10:26.540Z","0.1.0":"2026-04-24T12:13:00.361Z","0.1.1":"2026-04-27T17:10:26.265Z"},"bugs":{"url":"https://github.com/burnmark-io/sheet-templates/issues"},"author":{"name":"Mannes Brak"},"license":"MIT","homepage":"https://github.com/burnmark-io/sheet-templates","keywords":["labels","stickers","avery","herma","zweckform","sheets","templates","burnmark"],"repository":{"type":"git","url":"git+https://github.com/burnmark-io/sheet-templates.git"},"description":"Sticker sheet template registry — Avery, Herma, Zweckform, and hundreds more","maintainers":[{"name":"bankersman","email":"broodje@warmvle.es"}],"readme":"# @burnmark-io/sheet-templates\n\n[![npm](https://img.shields.io/npm/v/@burnmark-io/sheet-templates.svg)](https://www.npmjs.com/package/@burnmark-io/sheet-templates)\n[![license](https://img.shields.io/npm/l/@burnmark-io/sheet-templates.svg)](./LICENSE)\n[![templates](https://img.shields.io/badge/templates-1599-blue)](./src/templates.json)\n[![brands](https://img.shields.io/badge/brands-56-blue)](#supported-brands)\n\nA zero-runtime-dependency JSON registry of sticker sheet specifications — **1599 templates across 56 brands** including Avery, Herma, Zweckform, APLI, Dymo, Online Labels, Worldlabel, Rayfilm, SheetLabels, Uline, and many more.\n\nBuilt for `@burnmark-io/designer-core` so label designs can be tiled onto any standard A4, US-Letter, or custom-size sticker sheet for PDF export — but usable from any TypeScript / JavaScript project that needs sheet dimensions.\n\n## Install\n\n```bash\npnpm add @burnmark-io/sheet-templates\n# or: npm install @burnmark-io/sheet-templates\n```\n\n## Usage\n\n```ts\nimport {\n  SHEETS,\n  findSheet,\n  findByBrand,\n  findBySize,\n  findByPaper,\n  listBrands,\n  primaryLayout,\n  type SheetTemplate,\n  type SheetLayout,\n} from '@burnmark-io/sheet-templates';\n\n// Look up a known product code\nconst sheet = findSheet('avery-l7160');\n//  → { code, name, brand: 'Avery', part: 'L7160', paperSize: 'A4',\n//      paperWidthMm: 210, paperHeightMm: 297,\n//      labelWidthMm: 63.5, labelHeightMm: 38.1, labelShape: 'rectangle',\n//      cornerRadiusMm, layouts: [{ columns: 3, rows: 7, ... }], ... }\n\n// All Avery sheets (case-insensitive)\nfindByBrand('Avery');\n\n// Find by approximate label dimensions (default tolerance: 1 mm)\nfindBySize(63.5, 38.1);            // tight\nfindBySize(63.5, 38.1, 2);         // within 2 mm\n\n// Filter by paper size\nfindByPaper('A4');\nfindByPaper('US-Letter');\n\n// Enumerate the catalog\nlistBrands();\n// → ['Agipa', 'APLI', 'Apli', 'Ascom', 'Avery', ...]\n\n// Full registry, sorted by brand then part\nSHEETS.length;                     // 1599\n\n// Primary grid layout (shortcut for sheet.layouts[0])\nprimaryLayout(sheet).columns;      // 3\n```\n\n## Data shape\n\n```ts\ninterface SheetTemplate {\n  code: string;            // e.g. 'avery-l7160' (brand-part, normalised)\n  name: string;            // e.g. 'Avery L7160 — Address labels'\n  brand: string;           // e.g. 'Avery'\n  part: string;            // e.g. 'L7160'\n  paperSize: string;       // 'A4', 'US-Letter', 'Other', ...\n  paperWidthMm: number;\n  paperHeightMm: number;\n  labelWidthMm: number;\n  labelHeightMm: number;\n  labelShape: 'rectangle' | 'round' | 'ellipse';\n  cornerRadiusMm?: number;\n  layouts: SheetLayout[];  // one entry per <Layout>; multi-layout sheets have two or more\n  marginMm?: number;       // non-printing bleed margin, when the source XML specifies one\n  categories?: string[];   // e.g. ['label', 'mail']\n}\n\ninterface SheetLayout {\n  columns: number;         // nx\n  rows: number;            // ny\n  originXMm: number;       // x0 — top-left of the first label\n  originYMm: number;       // y0\n  pitchXMm: number;        // dx — centre-to-centre horizontal spacing\n  pitchYMm: number;        // dy\n}\n```\n\n`layouts` is an array because some real-world sheets (staggered business cards, offset grids) use two or three `<Layout>` elements to describe non-uniform cell placement. For the common single-grid case, `layouts.length === 1` and `primaryLayout(sheet)` returns it directly.\n\n## Supported brands\n\nAgipa, Apli, APLI, Ascom, Avery, Begalabel, Best Office, Biltem, Bruna, Cable Label Co, Celcast, Connect, DataBecker, Dataline, DECAdry, Dymo, Ednet, Encre.com, Endisch, Epson, Felga, Geha, Hama, Hema, Herma, Hisago, Igepa, Impact, JAC, Kingdom, Kores, Maco, Meritline, Micro Application, Neato, Netc, OfficeMax, Online Labels, PEARL, Poundland, Q-CONNECT, Rayfilm, Russian, Ryman, Sattleford, SheetLabels, Sigel, Southworth, Staples, Stomper, Tough-Tags, Uline, Viking, Worldlabel, Your Design, Zweckform.\n\n## How the data is built\n\nTemplate data is sourced from the [glabels-qt](https://github.com/j-evins/glabels-qt) template database by Jaye Evins — hundreds of hand-curated XML definitions maintained since 2001 under the MIT license.\n\nA build-time script (`scripts/convert.ts`) walks `upstream/templates/*.xml`, normalises every distance to millimetres, resolves `equiv` clone references, captures all `<Layout>` elements, skips CD/DVD media and continuous-roll templates, dedupes, and writes `src/templates.json`. Updating from upstream is a submodule pull and a `pnpm run convert` away — no manual data entry.\n\nThe published npm package ships only the generated JSON and a thin TypeScript wrapper. **Zero runtime dependencies.** `fast-xml-parser` and `tsx` are devDependencies used only during the build.\n\n## Attribution\n\nTemplate data is sourced from the **glabels-qt** template database by **Jaye Evins**, licensed under the MIT License (see [LICENSE-GLABELS](./LICENSE-GLABELS)). The gLabels project has been maintaining this catalog since 2001. Please credit upstream when redistributing.\n\n## License\n\nMIT © 2026 Mannes Brak. See [LICENSE](./LICENSE) for this package's code, and [LICENSE-GLABELS](./LICENSE-GLABELS) for the template data.\n","readmeFilename":"README.md"}