{"_id":"@a4-pagination-print/core","_rev":"2-727d52e9bcac02b554f37ec1aa9ff3cb","name":"@a4-pagination-print/core","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@a4-pagination-print/core","version":"0.1.0","keywords":["a4","pagination","pdf","report","page-break","typescript"],"license":"MIT","_id":"@a4-pagination-print/core@0.1.0","maintainers":[{"name":"qq312999192","email":"312999192@qq.com"}],"dist":{"shasum":"6a7f4b08d6ec5bff3d0703e34f8d5d59f9164fc6","tarball":"https://registry.npmjs.org/@a4-pagination-print/core/-/core-0.1.0.tgz","fileCount":29,"integrity":"sha512-Npxrr9VxnzSss8O0uqyNVD+fDhC3rK8oLLEaoeJt1E8fRuPtVcKlZKjErs1LZTnrJjtG2SueBlJRotctJDRQCA==","signatures":[{"sig":"MEQCIH+PcWuVxqmszLPoQyhQ0nECrHZbwCI2mFnkYyVzB5LpAiAntGK85ICZRgQlfcTTBw0EoS+8/8QTGV1PGERMz8/Emg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73376},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"qq312999192","email":"312999192@qq.com"},"_npmVersion":"10.7.0","description":"A4 pagination engine — pure TypeScript, zero DOM dependency","directories":{},"sideEffects":false,"_nodeVersion":"20.15.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","typescript":"^5.5.0"},"_npmOperationalInternal":{"tmp":"tmp/core_0.1.0_1785023735342_0.9658999688608143","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@a4-pagination-print/core","version":"0.1.1","description":"A4 pagination engine — pure TypeScript, zero DOM dependency","type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"sideEffects":false,"scripts":{"build":"tsc","dev":"tsc --watch","test":"vitest run","test:watch":"vitest","prepublishOnly":"npm run build && npm test"},"keywords":["a4","pagination","pdf","report","page-break","typescript"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/qizhifeng00/a4-pagination-print-core.git"},"homepage":"https://github.com/qizhifeng00/a4-pagination-print-core#readme","bugs":{"url":"https://github.com/qizhifeng00/a4-pagination-print-core/issues"},"devDependencies":{"typescript":"^5.5.0","vitest":"^2.0.0"},"_id":"@a4-pagination-print/core@0.1.1","gitHead":"6d9587a746f83200479d78d3ac282a5dd86c8603","_nodeVersion":"20.15.0","_npmVersion":"10.7.0","dist":{"integrity":"sha512-B5wQgwvSFp58lPO0UL/cf5eMQXVWcCT0xUH6MvKndRa9Ud+oFF/bZXA6aD2Of1natLQw49SjeNHro7xnrdfhvA==","shasum":"cad2f0fe2e0abfa3200206bf6d3d59831fbf6047","tarball":"https://registry.npmjs.org/@a4-pagination-print/core/-/core-0.1.1.tgz","fileCount":30,"unpackedSize":76795,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCKgj+nIdXm7iiAZT+1/6UZ9JA01z9Vs+qz3cV5UOKsmwIhALAzLNem0cnvlBIFMQHML4TcNe2HxB7tsFA11buXAnkb"}]},"_npmUser":{"name":"qq312999192","email":"312999192@qq.com"},"directories":{},"maintainers":[{"name":"qq312999192","email":"312999192@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/core_0.1.1_1785025003746_0.01107896528867025"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-25T23:55:35.251Z","modified":"2026-07-26T00:16:44.036Z","0.1.0":"2026-07-25T23:55:35.509Z","0.1.1":"2026-07-26T00:16:43.899Z"},"license":"MIT","keywords":["a4","pagination","pdf","report","page-break","typescript"],"description":"A4 pagination engine — pure TypeScript, zero DOM dependency","maintainers":[{"name":"qq312999192","email":"312999192@qq.com"}],"readme":"# @a4-pagination-print/core\n\n[![npm version](https://img.shields.io/npm/v/@a4-pagination-print/core)](https://www.npmjs.com/package/@a4-pagination-print/core)\n[![license](https://img.shields.io/npm/l/@a4-pagination-print/core)](https://github.com/qizhifeng00/a4-pagination-print-core/blob/main/LICENSE)\n\nA4 分页核心引擎 — 纯 TypeScript，零 DOM 依赖，可在浏览器和 Node.js 中使用。\n\n```bash\nnpm install @a4-pagination-print/core\n```\n\n## 适用场景\n\n- 在**任何 JavaScript 运行时**（浏览器 / Node.js / Deno）中做 A4 分页计算\n- 作为底层引擎，搭配 `@a4-pagination-print/vue` 或 `@a4-pagination-print/react` 使用\n- 需要在服务端做预分页、PDF 生成等\n\n## 功能\n\n### datePaginate — 日期感知分页\n\n```typescript\nimport { datePaginate, getPaginationMeta } from '@a4-pagination-print/core';\nimport type { DateGroup } from '@a4-pagination-print/core';\n\nconst groups: DateGroup[] = [\n  { date: '2026-07-24', blocks: [...] },\n  { date: '2026-07-25', blocks: [...] },\n];\n\nconst pages = datePaginate(groups);\n// → Page[]  每个元素: { date, pageNumber, blocks }\n\nconst meta = getPaginationMeta(pages);\n// → { totalPages, dates, pagesPerDate, pageIndexMap }\n```\n\n### measureBlock — 高度测量\n\n```typescript\nimport { measureBlock, measureBlocks } from '@a4-pagination-print/core';\n\nconst result = measureBlock(block);\n// → { height: number, rowHeights?: number[] }\n\nconst measured = measureBlocks(blocks);\n```\n\n### PageNavigator — 翻页导航\n\n```typescript\nimport { PageNavigator } from '@a4-pagination-print/core';\n\nconst nav = new PageNavigator(pages);\nnav.next();            // → { success, globalIndex, date, pageNumber }\nnav.prev();\nnav.goToDate('2026-07-25');\nnav.goTo(3);\n```\n\n### 可插拔测量策略\n\n```typescript\nimport type { MeasureStrategy, Block } from '@a4-pagination-print/core';\n\nconst myStrategy: MeasureStrategy = {\n  measureBlock(block: Block): Block {\n    return { ...block, height: myPreciseMeasure(block) };\n  },\n  measureBlocks(blocks: Block[]): Block[] {\n    return blocks.map((b) => this.measureBlock(b));\n  },\n};\n\nconst pages = datePaginate(groups, { measureStrategy: myStrategy });\n```\n\n### 打印样式\n\n```typescript\nimport { generatePrintCSS, generatePrintAllCSS } from '@a4-pagination-print/core';\nimport {\n  PAGE_STYLE, HEADER_STYLE, FOOTER_STYLE,\n  TABLE_STYLE, TH_STYLE, TD_STYLE,\n  TEXT_STYLE, INPUT_TEXTAREA_STYLE,\n} from '@a4-pagination-print/core';\n```\n\n## 核心类型\n\n```typescript\ntype BlockType = 'table' | 'chart' | 'input' | 'text' | 'custom';\n\ninterface Block {\n  id: string;\n  type: BlockType;\n  height: number;       // mm，0 = 自动测量\n  breakable: boolean;   // 允许跨页拆分\n}\n\ninterface DateGroup { date: string; blocks: Block[]; }\n\ninterface Page { date: string; pageNumber: number; blocks: Block[]; }\n```\n\n## 分页规则\n\n1. 遍历 blocks，累积高度\n2. 放不下时：可拆分表格 → 逐行累加拆分，不可拆分 → 整体移到下一页\n3. 底部保留 2mm 安全边距防截断\n4. 每个日期独立分页，页码从 1 开始\n5. 输入数据不会被修改\n\n## License\n\nMIT\n","readmeFilename":"README.md","homepage":"https://github.com/qizhifeng00/a4-pagination-print-core#readme","repository":{"type":"git","url":"git+https://github.com/qizhifeng00/a4-pagination-print-core.git"},"bugs":{"url":"https://github.com/qizhifeng00/a4-pagination-print-core/issues"}}