diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 3a4d2d7..bdcc20f 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -784,7 +784,7 @@ jobs: retention-days: 7 - name: Verify downloadable playground projects run: | - python -m pip install fullbleed==2.5.24 pypdf==6.19.0 + python -m pip install fullbleed==2.5.29 pypdf==6.19.0 node tools/verify_project_export.mjs python -I tools/verify_project_export.py python -I tools/verify_node_project_export.py diff --git a/docs/assets/brand/fullbleed-print-mark.svg b/docs/assets/brand/fullbleed-print-mark.svg new file mode 100644 index 0000000..9ad03f9 --- /dev/null +++ b/docs/assets/brand/fullbleed-print-mark.svg @@ -0,0 +1,7 @@ + diff --git a/docs/assets/browser-starter/project.zip b/docs/assets/browser-starter/project.zip index 67e06ec..0715f7f 100644 Binary files a/docs/assets/browser-starter/project.zip and b/docs/assets/browser-starter/project.zip differ diff --git a/docs/assets/browser-starter/source.json b/docs/assets/browser-starter/source.json index 258084a..e468e8e 100644 --- a/docs/assets/browser-starter/source.json +++ b/docs/assets/browser-starter/source.json @@ -1,20 +1,20 @@ { "source_repository": "https://github.com/fullbleed-engine/fullbleed-node", - "source_commit": "c35351ec5eb38e76df61c5aa3c3ce52f3855f53b", + "source_commit": "a947db8cd40212ac565652fdc1564121a6a73f21", "source_directory": "examples/browser", - "package_version": "0.5.1", - "engine_version": "2.5.24", - "package_integrity": "sha512-NSrRDtxqMqm1/tZdEeJm1rSRSvLwL9xpX4emE0cV9wTYSIBuynoQwgV+WbC04/OXfCZpPau7vt5hS0zxYbZaMQ==", - "zip_bytes": 24381, - "zip_sha256": "b7ffa8621bdc91437a6962c5ab1952e4f9e580ab5acc327206471a2c20085f18", + "package_version": "0.7.1", + "engine_version": "2.5.29", + "package_integrity": "sha512-lCN2tzqSJwrwqObrPT0StCEKLrwvSbikejqQR3lof0pFq8TlgO1bS3fDpA1+Xh5UcRZnMKx6BfT54or93pQyGw==", + "zip_bytes": 24390, + "zip_sha256": "926e4b93422663cfda9d69bef56f253a6cdb02f2d5f20673cd3a3d88ddbc3f84", "files": { "fullbleed-browser-starter/.gitignore": "c023fec2bf12476cb47709e859f1fbb785aeb1e03281e52141e0bee1ee7dad72", "fullbleed-browser-starter/LICENSE": "36a2115938f6e68cf0d87eccff7a6a3e57c17017e909cbd640d51aff1fa0c5a9", - "fullbleed-browser-starter/README.md": "d2b3c57f5d1008aea4b701cca6c940e48bec7bc936bbcdf44f7b3a0ec4c49f65", - "fullbleed-browser-starter/index.html": "8714cd15f58623edf29fc4f725f280af35f5749e9fa1ebd9bb6f71985dbd1f3a", - "fullbleed-browser-starter/package-lock.json": "49eb5af81f0814183511d65d01c8759baa92962d30e95d958de124c167a1a5e1", - "fullbleed-browser-starter/package.json": "18358d17589beae99860e95d40dda6ed8f3f625689b3d1854961a1df46b888c8", - "fullbleed-browser-starter/public/favicon.svg": "3eed6dcf1013e48bc64886fed4cf815c609ed06b404742bdacdc44c1df8d3118", + "fullbleed-browser-starter/README.md": "b45dc07f943ae2339c549d84fa2ff9f4b354a9c062cea7e3a36c005c9e8ea0a3", + "fullbleed-browser-starter/index.html": "8cbae46ebceaa5c595db4056e96563eda4da5bf9b0a53c66830ba67e41f7d959", + "fullbleed-browser-starter/package-lock.json": "1d7f5a85463a76852b014e664352432619e09eb2f32dda9d5309a1aa9c36d8c6", + "fullbleed-browser-starter/package.json": "d2fe05482a01ac835988ace476c6f727e806759188c71ad6fa99a8cfb70fa5f8", + "fullbleed-browser-starter/public/favicon.svg": "14e54700b07ee8762556b4fdeb1b406bfc79492bc1d6958e3f97dbd83c2cd0d0", "fullbleed-browser-starter/src/invoice.css": "0b310ce0f2964fd6b9b68e4afafa9307b4ff8c6b2f1fc753367dc755620ce427", "fullbleed-browser-starter/src/invoice.html": "1f065ad6694021649e61b3f666cba6dc01aacdcbd8e80e97425b383e60d7d2fe", "fullbleed-browser-starter/src/main.js": "3ffcbe09c7117e635c21c39ad9be1aa3e7af16be7fc325683a7baaecae04d275", @@ -23,6 +23,15 @@ "fullbleed-browser-starter/src/style.css": "131426c760df6f64f5890d03f2b3301bf2003f63008b7f90aea311c400db6f17", "fullbleed-browser-starter/vite.config.js": "ec725922705a3c5ba2df191a564c54c0cac6e8997ecd3d00b8a42c647bec8e74" }, - "local_ui_evidence": "https://github.com/fullbleed-engine/fullbleed-node/blob/c35351ec5eb38e76df61c5aa3c3ce52f3855f53b/verification/starters-051.json", - "source_verification_run": "https://github.com/fullbleed-engine/fullbleed-node/actions/runs/38757928683" + "local_ui_evidence": "https://github.com/fullbleed-engine/fullbleed-node/blob/7a79b374784e60998fd163e0f86a76dae37523e5/verification/starters-071.json", + "source_verification_run": "https://github.com/fullbleed-engine/fullbleed-node/actions/runs/39504401399", + "favicon_revision": { + "source_pr": "https://github.com/fullbleed-engine/fullbleed-node/pull/44", + "sha256": "14e54700b07ee8762556b4fdeb1b406bfc79492bc1d6958e3f97dbd83c2cd0d0", + "changes": [ + "index.html", + "public/favicon.svg" + ], + "prior_source_commit": "7a79b374784e60998fd163e0f86a76dae37523e5" + } } diff --git a/docs/assets/nextjs/project.zip b/docs/assets/nextjs/project.zip index a6e502d..48c8088 100644 Binary files a/docs/assets/nextjs/project.zip and b/docs/assets/nextjs/project.zip differ diff --git a/docs/assets/nextjs/source.json b/docs/assets/nextjs/source.json index dea42a1..b6279b2 100644 --- a/docs/assets/nextjs/source.json +++ b/docs/assets/nextjs/source.json @@ -1,12 +1,12 @@ { "sourceRepository": "https://github.com/fullbleed-engine/fullbleed-node", - "sourceCommit": "c35351ec5eb38e76df61c5aa3c3ce52f3855f53b", + "sourceCommit": "7a79b374784e60998fd163e0f86a76dae37523e5", "files": 18, "assets": [ { "file": "project.zip", - "bytes": 104786, - "sha256": "04d1872769f813c7f7beb4901b21da5eab2e29475225f637742db599fcb82375" + "bytes": 104791, + "sha256": "0d7360b81cf4175ed8d32e6468a4063aa87c2904ee78340496a9ce3d9be62321" }, { "file": "invoice.pdf", @@ -22,15 +22,15 @@ "fileHashes": { "fullbleed-nextjs/.gitignore": "b4abc38d76926640e3f2cbe3bf25c8f5aec6cc43dd978c48d3ad5cc20d964f66", "fullbleed-nextjs/LICENSE": "36a2115938f6e68cf0d87eccff7a6a3e57c17017e909cbd640d51aff1fa0c5a9", - "fullbleed-nextjs/README.md": "8529b0f0718e153956cb85613e4961c9ea2205802f71078a19d884d5e2509509", + "fullbleed-nextjs/README.md": "61bee7f7c17168a2061893762142cc795fe7992e97d92feab9b73f4c95d66bd3", "fullbleed-nextjs/app/api/invoices/[id]/route.js": "d6348ce64b44feac7010e21fb0f55723e0858c7867222ae831c45d3440a3b052", "fullbleed-nextjs/app/globals.css": "02e0b545a14eaf15e6d3d8fc8c0e8c0f1c5ce5c1b8dc461b4343d330f291233e", "fullbleed-nextjs/app/layout.js": "2df89bff0d2f002b432b3fdb73fd64edf59c57641d9ea6df3f0051cf2329cf27", "fullbleed-nextjs/app/page.js": "24c7996f8172992f925cdb1e47455d0095397d0832f747c90ecb409f2a1d460c", "fullbleed-nextjs/lib/invoice.mjs": "fd87dd082fa19659ec572d97255c1902e1e728e43ebbc3e0ade9891fa7736cf2", "fullbleed-nextjs/next.config.mjs": "e93613419f5aaa6264f0405e5afbb6f5eea4c956e42e7ebf30a6c85a4d9d89b3", - "fullbleed-nextjs/package-lock.json": "a48102d9affaa7d6f424b69835ea837737848abcfd321c8f5f12db88ad63de94", - "fullbleed-nextjs/package.json": "f4d4f5a61c6c00022ba7abfece2c3b4aa7ff4f5c0ff3b640ae1bfc3dd5c24620", + "fullbleed-nextjs/package-lock.json": "ffc199cb54dfc51e1da70ee9b2685cb7a376ea62e65353c86c3175dee9746245", + "fullbleed-nextjs/package.json": "2ce3a14c9fa5e182f844597dd89de16f38ad27450c8811d2682dae18249c26fa", "fullbleed-nextjs/public/invoice.png": "72420749ccc3deaa8025daf7baffcdf79be716b6e8e93ed605effebed01e86c7", "fullbleed-nextjs/templates/invoice.css": "cda22b39ab1f7a1eeac7cd76d162b05cd3568c2430c099123ba30a2fbd58a296", "fullbleed-nextjs/templates/invoice.html": "d9a5b1950ddab61f08628b0fcc773cb36f05d9401bb3d87273bca02452b1835e", @@ -39,7 +39,7 @@ "fullbleed-nextjs/tools/start.mjs": "4c185a0801ca4f89a30a0c1e75710f1c22c84463d29477900162b05a8bc52eab", "fullbleed-nextjs/tools/verify.mjs": "54623914ff28a47ea63a553d063ac50a206df0424270dacb3f3a99054982a888" }, - "packageVersion": "0.5.1", - "engineVersion": "2.5.24", - "sourceVerificationRun": "https://github.com/fullbleed-engine/fullbleed-node/actions/runs/38757928483" + "packageVersion": "0.7.1", + "engineVersion": "2.5.29", + "sourceVerificationRun": "https://github.com/fullbleed-engine/fullbleed-node/actions/runs/39499450050" } diff --git a/docs/assets/playground/LICENSES.txt b/docs/assets/playground/LICENSES.txt index 25d197d..1827564 100644 --- a/docs/assets/playground/LICENSES.txt +++ b/docs/assets/playground/LICENSES.txt @@ -1,4 +1,4 @@ -fullbleed 2.5.24 / LICENSE +fullbleed 2.5.29 / LICENSE MIT License @@ -23,7 +23,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -fullbleed 2.5.24 / THIRD_PARTY_LICENSES.md +fullbleed 2.5.29 / THIRD_PARTY_LICENSES.md # Third-Party Licenses @@ -826,7 +826,7 @@ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -fullbleed 2.5.24 / src/preview_fonts/LICENSE-Liberation.txt +fullbleed 2.5.29 / src/preview_fonts/LICENSE-Liberation.txt Digitized data copyright (c) 2010 Google Corporation with Reserved Font Arimo, Tinos and Cousine. @@ -932,7 +932,7 @@ DEALINGS IN THE FONT SOFTWARE. -fullbleed 2.5.24 / src/preview_fonts/LICENSE-NotoSans.txt +fullbleed 2.5.29 / src/preview_fonts/LICENSE-NotoSans.txt Copyright 2022 The Noto Project Authors (https://github.com/notofonts/latin-greek-cyrillic) @@ -1031,7 +1031,7 @@ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. -fullbleed 2.5.24 / src/preview_fonts/LICENSE-NotoSansMath.txt +fullbleed 2.5.29 / src/preview_fonts/LICENSE-NotoSansMath.txt Copyright 2018 Google LLC. All Rights Reserved. @@ -1130,7 +1130,7 @@ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. -fullbleed 2.5.24 / src/preview_fonts/LICENSE-NotoSansSymbols.txt +fullbleed 2.5.29 / src/preview_fonts/LICENSE-NotoSansSymbols.txt Copyright 2016 Google LLC. All Rights Reserved. @@ -1229,7 +1229,7 @@ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. -fullbleed 2.5.24 / src/preview_fonts/LICENSE-NotoSansSymbols2.txt +fullbleed 2.5.29 / src/preview_fonts/LICENSE-NotoSansSymbols2.txt Copyright 2017 Google Inc. All Rights Reserved. diff --git a/docs/assets/playground/app.js b/docs/assets/playground/app.js index 155f144..cfc00c4 100644 --- a/docs/assets/playground/app.js +++ b/docs/assets/playground/app.js @@ -38,7 +38,7 @@ function clearOutput() { el('placeholder').hidden = false; el('placeholder').textContent = 'Render your document to see it here.'; el('page-count').textContent = '—'; - el('result').textContent = 'Fullbleed 2.5.24'; + el('result').textContent = 'Fullbleed 2.5.29'; el('previous').disabled = el('next').disabled = true; setDownload(false); } diff --git a/docs/assets/playground/project/node/package-lock.json b/docs/assets/playground/project/node/package-lock.json index 347c1d5..60fe99d 100644 --- a/docs/assets/playground/project/node/package-lock.json +++ b/docs/assets/playground/project/node/package-lock.json @@ -8,7 +8,7 @@ "name": "fullbleed-playground-project", "version": "1.0.0", "dependencies": { - "fullbleed": "0.5.1" + "fullbleed": "0.7.1" }, "engines": { "node": ">=22" @@ -21,9 +21,9 @@ "license": "MIT OR Apache-2.0" }, "node_modules/fullbleed": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/fullbleed/-/fullbleed-0.5.1.tgz", - "integrity": "sha512-NSrRDtxqMqm1/tZdEeJm1rSRSvLwL9xpX4emE0cV9wTYSIBuynoQwgV+WbC04/OXfCZpPau7vt5hS0zxYbZaMQ==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/fullbleed/-/fullbleed-0.7.1.tgz", + "integrity": "sha512-lCN2tzqSJwrwqObrPT0StCEKLrwvSbikejqQR3lof0pFq8TlgO1bS3fDpA1+Xh5UcRZnMKx6BfT54or93pQyGw==", "license": "MIT", "dependencies": { "@bjorn3/browser_wasi_shim": "0.4.2" diff --git a/docs/assets/playground/project/node/package.json b/docs/assets/playground/project/node/package.json index d62b3ad..1d87e65 100644 --- a/docs/assets/playground/project/node/package.json +++ b/docs/assets/playground/project/node/package.json @@ -10,9 +10,9 @@ "node": ">=22" }, "dependencies": { - "fullbleed": "0.5.1" + "fullbleed": "0.7.1" }, "fullbleed": { - "engineVersion": "2.5.24" + "engineVersion": "2.5.29" } } diff --git a/docs/assets/playground/upgrade-verification-071.json b/docs/assets/playground/upgrade-verification-071.json new file mode 100644 index 0000000..517168f --- /dev/null +++ b/docs/assets/playground/upgrade-verification-071.json @@ -0,0 +1,233 @@ +{ + "ok": true, + "status": "Verified", + "checkedAt": "2026-10-20T21:31:30.258133+00:00", + "engine": "2.5.29", + "nodePackage": "0.7.1", + "nodeSource": "7a79b374784e60998fd163e0f86a76dae37523e5", + "nativeWasiFixtures": 20, + "pythonExportFixtures": 26, + "nodeExportFixtures": 26, + "priorFixturePdfAndPreviewBytesUnchanged": [ + "invoice", + "invoice-edited", + "report", + "notice", + "linear-gradient", + "translucent-gradient", + "hard-radial-gradient", + "standard-fonts", + "engine-counter-sibling-reset", + "engine-overflow-nested-clips", + "engine-border-center-zero-top-falls-back-bottom-svg", + "engine-first-letter-decorated-left", + "visibility-script-blocks", + "visibility-style-blocks", + "visibility-hidden-span-paragraph", + "visibility-script-revert", + "visibility-script-inline-paragraph", + "decoration-inter-40-underline-font", + "decoration-inter-40-underline-length", + "decoration-inter-40-underline-auto" + ], + "starterSourceRuns": [ + { + "id": 39499450066, + "name": "React starter", + "html_url": "https://github.com/fullbleed-engine/fullbleed-node/actions/runs/39499450066", + "head_sha": "7a79b374784e60998fd163e0f86a76dae37523e5", + "conclusion": "success", + "jobs": 3 + }, + { + "id": 39499449902, + "name": "Browser starter", + "html_url": "https://github.com/fullbleed-engine/fullbleed-node/actions/runs/39499449902", + "head_sha": "7a79b374784e60998fd163e0f86a76dae37523e5", + "conclusion": "success", + "jobs": 3 + }, + { + "id": 39499450050, + "name": "Next.js PDF starter", + "html_url": "https://github.com/fullbleed-engine/fullbleed-node/actions/runs/39499450050", + "head_sha": "7a79b374784e60998fd163e0f86a76dae37523e5", + "conclusion": "success", + "jobs": 3 + }, + { + "id": 39499450078, + "name": "Vue starter", + "html_url": "https://github.com/fullbleed-engine/fullbleed-node/actions/runs/39499450078", + "head_sha": "7a79b374784e60998fd163e0f86a76dae37523e5", + "conclusion": "success", + "jobs": 3 + } + ], + "downloadProjects": [ + { + "kind": "browser", + "files": 14, + "source_commit": "a947db8cd40212ac565652fdc1564121a6a73f21", + "zip_sha256": "926e4b93422663cfda9d69bef56f253a6cdb02f2d5f20673cd3a3d88ddbc3f84", + "workflow": "https://github.com/fullbleed-engine/fullbleed-node/actions/runs/39504401399", + "changed_files": [ + "fullbleed-browser-starter/index.html", + "fullbleed-browser-starter/public/favicon.svg" + ] + }, + { + "kind": "react", + "files": 20, + "source_commit": "a947db8cd40212ac565652fdc1564121a6a73f21", + "zip_sha256": "c2b26b2e397e84060e15ed8c0635f71f2828eea7c4c4c93e472ca51f01af3044", + "workflow": "https://github.com/fullbleed-engine/fullbleed-node/actions/runs/39504401320", + "changed_files": [ + "fullbleed-react-starter/index.html", + "fullbleed-react-starter/public/favicon.svg" + ] + }, + { + "kind": "vue", + "files": 18, + "source_commit": "a947db8cd40212ac565652fdc1564121a6a73f21", + "zip_sha256": "7613f0cf9bcb6ee3df8cefd1f9a900b61dc86e6efab36e1addbc65bf471e9541", + "workflow": "https://github.com/fullbleed-engine/fullbleed-node/actions/runs/39504401448", + "changed_files": [ + "fullbleed-vue-starter/index.html", + "fullbleed-vue-starter/public/favicon.svg" + ] + }, + { + "kind": "nextjs", + "files": 18, + "source_commit": "7a79b374784e60998fd163e0f86a76dae37523e5", + "zip_sha256": "0d7360b81cf4175ed8d32e6468a4063aa87c2904ee78340496a9ce3d9be62321", + "workflow": "https://github.com/fullbleed-engine/fullbleed-node/actions/runs/39499450050" + } + ], + "localStarterBrowserChecks": { + "browser": 79, + "react": 128, + "vue": 87 + }, + "onlineLaunchers": { + "browser": { + "sourceMatchesZip": true, + "viewportWidths": [ + 1440, + 390, + 320 + ] + }, + "react": { + "sourceMatchesZip": true, + "viewportWidths": [ + 1440, + 390, + 320 + ] + }, + "vue": { + "sourceMatchesZip": true, + "viewportWidths": [ + 1440, + 390, + 320 + ] + } + }, + "nextjsChecks": 17, + "coreRelease": "https://github.com/fullbleed-engine/fullbleed-official/releases/tag/v2.5.29", + "nodeRelease": "https://github.com/fullbleed-engine/fullbleed-node/releases/tag/v0.7.1", + "scope": "These released-package starters, native/WASI fixtures, exact exported projects and local browser UI. Source workflow links cover the stated CI matrix. No universal CSS, hosted-platform or standards-conformance claim.", + "playgroundBrowserChecks": 80, + "playgroundBrowser": "155.0.8059.40", + "localSitePagesChecked": 150, + "rustEngine": "2.5.29", + "rustNativeFixtureMatches": 20, + "rustDownloadChecks": 77, + "rustDownloadSha256": "9d4238de2f479f137ed9624d34d2bc83c77261279439922512d5871e0c0193a0", + "rustScope": "Same published crate as the playground; unchanged version guard, exact native PDF/PNG fixture comparison, and actual standalone ZIP installation and failure recovery.", + "faviconRefresh": { + "checkedAt": "2026-10-20T22:02:15.697873+00:00", + "sourceCommit": "a947db8cd40212ac565652fdc1564121a6a73f21", + "sourcePullRequest": "https://github.com/fullbleed-engine/fullbleed-node/pull/44", + "faviconSha256": "14e54700b07ee8762556b4fdeb1b406bfc79492bc1d6958e3f97dbd83c2cd0d0", + "changedSourceFilesPerStarter": [ + "index.html", + "public/favicon.svg" + ], + "checkedSizes": [ + 16, + 20, + 24, + 32, + 64, + 128 + ], + "checkedBackgrounds": [ + "light", + "dark" + ], + "localChecks": { + "ok": true, + "at": "2026-10-20T22:01:15.779728+00:00", + "browser": "155.0.8059.40", + "surfaces": [ + { + "kind": "browser", + "favicon_sha256": "14e54700b07ee8762556b4fdeb1b406bfc79492bc1d6958e3f97dbd83c2cd0d0", + "icon_url_versioned": true, + "pdf_sha256": "3078d155f30536f5ad721f7be3c241cd78661ae41249131fc0fd65f37f23e408", + "pdf_matches_baseline": true, + "online_editor_matches_zip": true, + "project_files": 14, + "source_commit": "a947db8cd40212ac565652fdc1564121a6a73f21" + }, + { + "kind": "react", + "favicon_sha256": "14e54700b07ee8762556b4fdeb1b406bfc79492bc1d6958e3f97dbd83c2cd0d0", + "icon_url_versioned": true, + "pdf_sha256": "f2553f220e9d30e26df785a4ed251f07ff1e615afd3972a5c29c19a0c5fd3f6c", + "pdf_matches_baseline": true, + "online_editor_matches_zip": true, + "project_files": 20, + "source_commit": "a947db8cd40212ac565652fdc1564121a6a73f21" + }, + { + "kind": "vue", + "favicon_sha256": "14e54700b07ee8762556b4fdeb1b406bfc79492bc1d6958e3f97dbd83c2cd0d0", + "icon_url_versioned": true, + "pdf_sha256": "3078d155f30536f5ad721f7be3c241cd78661ae41249131fc0fd65f37f23e408", + "pdf_matches_baseline": true, + "online_editor_matches_zip": true, + "project_files": 18, + "source_commit": "a947db8cd40212ac565652fdc1564121a6a73f21" + } + ], + "page_errors": [] + }, + "starterRuns": [ + { + "name": "Browser starter", + "url": "https://github.com/fullbleed-engine/fullbleed-node/actions/runs/39504401399", + "head": "a947db8cd40212ac565652fdc1564121a6a73f21", + "conclusion": "success" + }, + { + "name": "Vue starter", + "url": "https://github.com/fullbleed-engine/fullbleed-node/actions/runs/39504401448", + "head": "a947db8cd40212ac565652fdc1564121a6a73f21", + "conclusion": "success" + }, + { + "name": "React starter", + "url": "https://github.com/fullbleed-engine/fullbleed-node/actions/runs/39504401320", + "head": "a947db8cd40212ac565652fdc1564121a6a73f21", + "conclusion": "success" + } + ], + "scope": "Icon assets and cache-busting URLs only; existing package pins, application logic and PDF templates are unchanged." + } +} diff --git a/docs/assets/react-starter/baseline/verification.json b/docs/assets/react-starter/baseline/verification.json index b56f099..098a916 100644 --- a/docs/assets/react-starter/baseline/verification.json +++ b/docs/assets/react-starter/baseline/verification.json @@ -1,6 +1,6 @@ { - "package": "0.6.0", - "engine": "2.5.24", + "package": "0.7.1", + "engine": "2.5.29", "node": "v22.23.3", "records": [ { diff --git a/docs/assets/react-starter/project.zip b/docs/assets/react-starter/project.zip index d81780a..167fa7d 100644 Binary files a/docs/assets/react-starter/project.zip and b/docs/assets/react-starter/project.zip differ diff --git a/docs/assets/react-starter/source.json b/docs/assets/react-starter/source.json index 8ef8267..74ab7b5 100644 --- a/docs/assets/react-starter/source.json +++ b/docs/assets/react-starter/source.json @@ -1,21 +1,21 @@ { "source_repository": "https://github.com/fullbleed-engine/fullbleed-node", - "source_commit": "0de0e692d22a9058610a262a06a1797b7d892ae3", + "source_commit": "a947db8cd40212ac565652fdc1564121a6a73f21", "source_directory": "examples/react", - "package_version": "0.6.0", - "engine_version": "2.5.24", + "package_version": "0.7.1", + "engine_version": "2.5.29", "react_version": "19.3.0", - "package_integrity": "sha512-8tptrfaBbP4cjHohzPDPD1Lh3NuBFbRyVebn4kQhFsSX2VsMJwR6GURImfr9tbO3+iPjsZBFwZFxRYz238xc8g==", - "zip_bytes": 36304, - "zip_sha256": "ce228650f3a34a7702a8bde10c29143864df11f4c652e10c23b60834e9ceeb8d", + "package_integrity": "sha512-lCN2tzqSJwrwqObrPT0StCEKLrwvSbikejqQR3lof0pFq8TlgO1bS3fDpA1+Xh5UcRZnMKx6BfT54or93pQyGw==", + "zip_bytes": 36321, + "zip_sha256": "c2b26b2e397e84060e15ed8c0635f71f2828eea7c4c4c93e472ca51f01af3044", "files": { "fullbleed-react-starter/.gitignore": "0c8c1daabb918a54d7e75061883a887e9e0039d533487324a895ebe46afe15d8", "fullbleed-react-starter/LICENSE": "36a2115938f6e68cf0d87eccff7a6a3e57c17017e909cbd640d51aff1fa0c5a9", - "fullbleed-react-starter/README.md": "c4305bc2ca5def8a79e2dc786bd13d187a4307a536335a13285c38202947a633", - "fullbleed-react-starter/index.html": "cc0a93261ffb0c47e5c7aa808e03caab7c94ca2dc505d278411d96a3a703f1b3", - "fullbleed-react-starter/package-lock.json": "7a16d41978c8c5002a3b72d09c99e7a7f0d2f83c9a93cddb1ab925acd2847a73", - "fullbleed-react-starter/package.json": "d9c56c1953348c135f190e9b57cf84e54c2f960120c1c47f7959d7e1673244f1", - "fullbleed-react-starter/public/favicon.svg": "3eed6dcf1013e48bc64886fed4cf815c609ed06b404742bdacdc44c1df8d3118", + "fullbleed-react-starter/README.md": "bed4d14935f0381265742bd7396a314db79fc246059b32ae198befd4f053252f", + "fullbleed-react-starter/index.html": "1e07a2b52074ed0add251f642fe7f06ae2ac56cc391d54c3d7cfcda0c84a7058", + "fullbleed-react-starter/package-lock.json": "cc4f2b5ed5fe698b1201041c4f36fb976d17119441c072a786beed0f41ad520b", + "fullbleed-react-starter/package.json": "a5c84e2b74f39bcc5aa76e60782a8c7427fe550f29a3a86d687a98aaa68647f3", + "fullbleed-react-starter/public/favicon.svg": "14e54700b07ee8762556b4fdeb1b406bfc79492bc1d6958e3f97dbd83c2cd0d0", "fullbleed-react-starter/src/App.tsx": "be531b4b19f86fe2b56ebb652efca23c3ce5e5c0cc656951e4e6ac13aa738d7e", "fullbleed-react-starter/src/documents/Invoice.tsx": "6737ef4e107935cf0e66291f1ef1576d6aef37e647555e81ce875bf37a5cb589", "fullbleed-react-starter/src/documents/data.ts": "c05c98fb07deaef2140f53df4f83670f138d6cad4a453fe09f423f7adb076f70", @@ -31,6 +31,15 @@ "fullbleed-react-starter/vite.config.js": "2a300aafa93df7e0269d06d104960ee5ac4d64989d37d61ca482c4b88db3629c" }, "verification_workflow": "https://github.com/fullbleed-engine/fullbleed-node/actions/workflows/react-starter.yml", - "source_verification_run": "https://github.com/fullbleed-engine/fullbleed-node/actions/runs/39462826180", - "local_ui_evidence": "https://github.com/fullbleed-engine/fullbleed-node/blob/0de0e692d22a9058610a262a06a1797b7d892ae3/verification/react-invoice-references.json" + "source_verification_run": "https://github.com/fullbleed-engine/fullbleed-node/actions/runs/39504401320", + "local_ui_evidence": "https://github.com/fullbleed-engine/fullbleed-node/blob/7a79b374784e60998fd163e0f86a76dae37523e5/verification/starters-071.json", + "favicon_revision": { + "source_pr": "https://github.com/fullbleed-engine/fullbleed-node/pull/44", + "sha256": "14e54700b07ee8762556b4fdeb1b406bfc79492bc1d6958e3f97dbd83c2cd0d0", + "changes": [ + "index.html", + "public/favicon.svg" + ], + "prior_source_commit": "7a79b374784e60998fd163e0f86a76dae37523e5" + } } diff --git a/docs/assets/rust-starter/project.zip b/docs/assets/rust-starter/project.zip index 833fd04..75efe42 100644 Binary files a/docs/assets/rust-starter/project.zip and b/docs/assets/rust-starter/project.zip differ diff --git a/docs/assets/rust-starter/source.json b/docs/assets/rust-starter/source.json index 834ffe2..7f5ef1b 100644 --- a/docs/assets/rust-starter/source.json +++ b/docs/assets/rust-starter/source.json @@ -1,7 +1,7 @@ { "schema": "fullbleed.rust-starter.v1", "repository": "https://github.com/fullbleed-engine/docs", - "engine": "2.5.24", + "engine": "2.5.29", "engine_features": [ "svg_raster" ], @@ -17,13 +17,13 @@ "path": "Cargo.lock", "source": "examples/rust/Cargo.lock", "bytes": 1299, - "sha256": "943c45288ca5eb3b1f9e45505bbb45f77eeaa530168c868ca6189bf1d146a6bc" + "sha256": "afb215d750a56a7fcf940a7cc2ed9459416aaf83711abc5561b8b2e3de0c5e29" }, { "path": "Cargo.toml", "source": "examples/rust/Cargo.toml", "bytes": 313, - "sha256": "5811c1b037c931a6adfe337d822406584fbab053790a1471910f0703209b32d5" + "sha256": "148708614b04d87483a8908e195e6420c1ddb3746dcd41a88a7454f3577257b3" }, { "path": "LICENSE", @@ -35,7 +35,7 @@ "path": "README.md", "source": "examples/rust/STARTER.md", "bytes": 3228, - "sha256": "92df2680b4e3b8646ce1392004709537922ad113314519023ad81afcb90c78ad" + "sha256": "fda65197b05e1946ccaf3d84662b3767b5a86cabf2239567d145852aa739724b" }, { "path": "fonts/BebasNeue-OFL.txt", @@ -116,6 +116,6 @@ "sha256": "46b0e975d43914c8b4492218feae09ea0ad684091a9f9ee3b18f66a87202e521" } ], - "zip_bytes": 587685, - "zip_sha256": "beac00a55671a90a2fbd1043a49d24a64a1fcf83e1def28d7a890e50b3f7ab9a" + "zip_bytes": 587687, + "zip_sha256": "9d4238de2f479f137ed9624d34d2bc83c77261279439922512d5871e0c0193a0" } diff --git a/docs/assets/vue-starter/baseline/verification.json b/docs/assets/vue-starter/baseline/verification.json index 2cb9dfe..683a8fa 100644 --- a/docs/assets/vue-starter/baseline/verification.json +++ b/docs/assets/vue-starter/baseline/verification.json @@ -1,6 +1,6 @@ { - "package": "0.5.1", - "engine": "2.5.24", + "package": "0.7.1", + "engine": "2.5.29", "node": "v22.23.3", "records": [ { diff --git a/docs/assets/vue-starter/project.zip b/docs/assets/vue-starter/project.zip index dfcba45..4f09f26 100644 Binary files a/docs/assets/vue-starter/project.zip and b/docs/assets/vue-starter/project.zip differ diff --git a/docs/assets/vue-starter/source.json b/docs/assets/vue-starter/source.json index ac344aa..4647167 100644 --- a/docs/assets/vue-starter/source.json +++ b/docs/assets/vue-starter/source.json @@ -1,21 +1,21 @@ { "source_repository": "https://github.com/fullbleed-engine/fullbleed-node", - "source_commit": "c35351ec5eb38e76df61c5aa3c3ce52f3855f53b", + "source_commit": "a947db8cd40212ac565652fdc1564121a6a73f21", "source_directory": "examples/vue", - "package_version": "0.5.1", - "engine_version": "2.5.24", + "package_version": "0.7.1", + "engine_version": "2.5.29", "vue_version": "3.5.43", - "package_integrity": "sha512-NSrRDtxqMqm1/tZdEeJm1rSRSvLwL9xpX4emE0cV9wTYSIBuynoQwgV+WbC04/OXfCZpPau7vt5hS0zxYbZaMQ==", - "zip_bytes": 30302, - "zip_sha256": "14620e5b9387f5dcebf75a0d59e8a5414934e8e547fd4287486ea0f8a3e0c22b", + "package_integrity": "sha512-lCN2tzqSJwrwqObrPT0StCEKLrwvSbikejqQR3lof0pFq8TlgO1bS3fDpA1+Xh5UcRZnMKx6BfT54or93pQyGw==", + "zip_bytes": 30317, + "zip_sha256": "7613f0cf9bcb6ee3df8cefd1f9a900b61dc86e6efab36e1addbc65bf471e9541", "files": { "fullbleed-vue-starter/.gitignore": "c023fec2bf12476cb47709e859f1fbb785aeb1e03281e52141e0bee1ee7dad72", "fullbleed-vue-starter/LICENSE": "36a2115938f6e68cf0d87eccff7a6a3e57c17017e909cbd640d51aff1fa0c5a9", - "fullbleed-vue-starter/README.md": "cf426bcc51d777f00a0685a7cbde90e36b2fbb0e75acf30f26638a30e9f017de", - "fullbleed-vue-starter/index.html": "30d46eb1b5147bd3d9c580e7adaed5b5202f9b97ab598e189efda7c3d2d405be", - "fullbleed-vue-starter/package-lock.json": "10d5796a71b184f3b3ad85525388c311183d37308796d89bb4a7386ad6f5552b", - "fullbleed-vue-starter/package.json": "7f65b1653048f1187062291ef1cde0aa701f88ef25cbe9bc84cd8cc0d0104424", - "fullbleed-vue-starter/public/favicon.svg": "3eed6dcf1013e48bc64886fed4cf815c609ed06b404742bdacdc44c1df8d3118", + "fullbleed-vue-starter/README.md": "449f147a8d1e88c3087cf41bbd646ff312649028f1cc672e45cea70c37d9d103", + "fullbleed-vue-starter/index.html": "9e1c7f227063911ce44edf02e240f40b628ce3ad66f0f99d68d3c4f8dfbc223b", + "fullbleed-vue-starter/package-lock.json": "ea2c616c264d449e601236bf5806f486dc5a403cc68d36faf49a28dec4b56cf1", + "fullbleed-vue-starter/package.json": "deec17c348cbb28c6e635a03bdb4e4dd4afc37322a82285752159eeaa38ad17a", + "fullbleed-vue-starter/public/favicon.svg": "14e54700b07ee8762556b4fdeb1b406bfc79492bc1d6958e3f97dbd83c2cd0d0", "fullbleed-vue-starter/src/App.vue": "0afa15196ccedd0b0f91293cc5e362799149a2752c59deaa377f4533825ea2af", "fullbleed-vue-starter/src/DocumentEditor.vue": "a3f3f8096d194e1eed6cd0cf2fb0a0606a04d40823ff7b794b9b1a0dbfd8c28a", "fullbleed-vue-starter/src/invoice.css": "0b310ce0f2964fd6b9b68e4afafa9307b4ff8c6b2f1fc753367dc755620ce427", @@ -29,6 +29,15 @@ "fullbleed-vue-starter/vite.config.js": "dfcc6c065fb26ada03802def672108735f4c2c35e0f30d11965ddfa796b8a0c0" }, "verification_workflow": "https://github.com/fullbleed-engine/fullbleed-node/actions/workflows/vue-starter.yml", - "local_ui_evidence": "https://github.com/fullbleed-engine/fullbleed-node/blob/c35351ec5eb38e76df61c5aa3c3ce52f3855f53b/verification/starters-051.json", - "source_verification_run": "https://github.com/fullbleed-engine/fullbleed-node/actions/runs/38757928545" + "local_ui_evidence": "https://github.com/fullbleed-engine/fullbleed-node/blob/7a79b374784e60998fd163e0f86a76dae37523e5/verification/starters-071.json", + "source_verification_run": "https://github.com/fullbleed-engine/fullbleed-node/actions/runs/39504401448", + "favicon_revision": { + "source_pr": "https://github.com/fullbleed-engine/fullbleed-node/pull/44", + "sha256": "14e54700b07ee8762556b4fdeb1b406bfc79492bc1d6958e3f97dbd83c2cd0d0", + "changes": [ + "index.html", + "public/favicon.svg" + ], + "prior_source_commit": "7a79b374784e60998fd163e0f86a76dae37523e5" + } } diff --git a/docs/getting-started/rust.md b/docs/getting-started/rust.md index 1a68fd6..37bcfa4 100644 --- a/docs/getting-started/rust.md +++ b/docs/getting-started/rust.md @@ -18,7 +18,7 @@ With Rust 1.85 or newer and a working native Rust toolchain: ```bash cargo new invoice-demo cd invoice-demo -cargo add fullbleed@=2.5.24 --features svg_raster +cargo add fullbleed@=2.5.29 --features svg_raster ``` Replace `src/main.rs` with: @@ -85,7 +85,7 @@ cargo run --release --locked --bin from-files -- templates/report.html templates Edit the files in `templates/` to customize the content and design. Render to a new output directory after edits, so previews from a longer previous document do not remain. The first Cargo build downloads dependencies and needs internet -access. These examples pin Fullbleed 2.5.24 and include a Cargo lockfile; the ZIP +access. These examples pin Fullbleed 2.5.29 and include a Cargo lockfile; the ZIP is compiled and rendered on Windows and Linux with Rust 1.97.0. For the service notice or your own edits, choose **Download project** in the @@ -131,7 +131,7 @@ playground font files. The `register_font_file` and `register_font_dir` helpers are also available, but skip unreadable or invalid files. A glyph report can find missing characters; it does not prove that the intended typeface loaded. The -[API font guide](https://docs.rs/fullbleed/2.5.24/fullbleed/#supply-fonts-explicitly) +[API font guide](https://docs.rs/fullbleed/2.5.29/fullbleed/#supply-fonts-explicitly) explains these choices. For one PNG per page, preview the PDF you just wrote at your chosen DPI: @@ -151,11 +151,11 @@ For a Rust web application, [download the Axum PDF starter](../guides/axum-pdf.m It turns invoice JSON into a styled download with editable HTML/CSS, bundled fonts, a browser form, and bounded rendering work. -Use [the hosted Rust API reference](https://docs.rs/fullbleed/2.5.24/fullbleed/) +Use [the hosted Rust API reference](https://docs.rs/fullbleed/2.5.29/fullbleed/) for the first-PDF program, method selection, fonts, and executable examples of fixed-layout and reflowing templates. The quickstart and downloadable designed -starter both pin 2.5.24 with SVG rendering enabled and match the -[2.5.24 source](https://github.com/fullbleed-engine/fullbleed-official/blob/v2.5.24/src/lib.rs). +starter both pin 2.5.29 with SVG rendering enabled and match the +[2.5.29 source](https://github.com/fullbleed-engine/fullbleed-official/blob/v2.5.29/src/lib.rs). Check [CSS coverage](../css-coverage.md) before adapting a web layout, and inspect your actual output when changing fonts or content. These examples use trusted diff --git a/docs/guides/browser-pdf.md b/docs/guides/browser-pdf.md index 436633a..72e4648 100644 --- a/docs/guides/browser-pdf.md +++ b/docs/guides/browser-pdf.md @@ -20,18 +20,18 @@ Use **Save HTML** and **Save CSS** beneath the editor to keep your template edit The **Download starter** link in the demo opens the complete application project. All sample names, organizations, and amounts are fictional. -The downloadable starter uses **npm package 0.5.1**, wrapping **Fullbleed engine 2.5.24**. +The downloadable starter uses **npm package 0.7.1**, wrapping **Fullbleed engine 2.5.29**. The browser and Node entries share the pinned engine and bundled fonts. Unembedded Helvetica, Times, and Courier faces produce visible PNG previews, including in templates pasted into the starter. -The [font-preview guide](https://github.com/fullbleed-engine/fullbleed-node/blob/v0.5.1/docs/standard-font-previews.md) +The [font-preview guide](https://github.com/fullbleed-engine/fullbleed-node/blob/v0.7.1/docs/standard-font-previews.md) explains the substitute designs and upgrade checks. Run the asset-copy command again after upgrading so the browser receives the matching runtime and notices. -Package **0.5.1** uses engine **2.5.24**, including hidden script/style text and +Package **0.7.1** uses engine **2.5.29**, including hidden script/style text and font-based decoration thickness fixes alongside the earlier layout fixes. For an existing project, follow the -[current browser installation guide](https://github.com/fullbleed-engine/fullbleed-node/blob/v0.5.1/docs/browser.md) +[current browser installation guide](https://github.com/fullbleed-engine/fullbleed-node/blob/v0.7.1/docs/browser.md) and recopy the browser runtime after upgrading. ## Edit the project online @@ -77,7 +77,7 @@ Install the package and copy its runtime into the directory your framework serves as static files: ```sh -npm install --save-exact fullbleed@0.5.1 +npm install --save-exact fullbleed@0.7.1 npx fullbleed-browser-assets public/fullbleed ``` @@ -141,7 +141,7 @@ completion or cancellation requests worker termination before the promise settle Browsers do not expose a native thread-exit promise. Keep concurrent jobs bounded for the devices you support, especially when generating page previews. -The [0.5.1 release evidence](https://github.com/fullbleed-engine/fullbleed-node/releases/tag/v0.5.1) +The [0.7.1 release evidence](https://github.com/fullbleed-engine/fullbleed-node/releases/tag/v0.7.1) retains checks in Chrome, Firefox, and Playwright WebKit, including PDF/PNG comparison with the installed Node package, independent PDF text checks, cancellation, damaged assets, and recovery. Playwright WebKit is not branded diff --git a/docs/guides/javascript-components.md b/docs/guides/javascript-components.md index 3a46f4f..5555a7c 100644 --- a/docs/guides/javascript-components.md +++ b/docs/guides/javascript-components.md @@ -15,7 +15,7 @@ its CSS included or with classes ready for a host application stylesheet. The downloadable invoice and guide use **fullbleed 0.7.1**, wrapping engine **2.5.29**, including the stable SVG stylesheet, inset-shadow and saved-PDF preview fixes. [HTML export](#export-html-with-or-without-styles) works with or without styles. -The linked React demo retains its separately verified 0.6.0 package. +The linked React demo uses the same package and engine versions. [Try the component invoice in React](../assets/react-demo/index.html){ .md-button .md-button--primary } diff --git a/docs/guides/nextjs-pdf.md b/docs/guides/nextjs-pdf.md index 0e051fd..414b1aa 100644 --- a/docs/guides/nextjs-pdf.md +++ b/docs/guides/nextjs-pdf.md @@ -34,8 +34,8 @@ Open `http://127.0.0.1:3000` and select **Download sample PDF**. The route `/api/invoices/NS-1042` returns the invoice as an attachment. The browser stays on the starter page. Use `npm run dev` while editing the app. -The lockfile pins Next.js 16.3.8, React 19.3.0 and Fullbleed Node 0.5.1, powered -by engine 2.5.24. Fullbleed is installed from npm. The registry tarball is +The lockfile pins Next.js 16.3.8, React 19.3.0 and Fullbleed Node 0.7.1, powered +by engine 2.5.29. Fullbleed is installed from npm. The registry tarball is byte-identical to the verified GitHub release. For an existing Node application, start with the [Node.js quickstart](../getting-started/node.md). diff --git a/docs/guides/react-pdf.md b/docs/guides/react-pdf.md index 2ed0a47..6678e71 100644 --- a/docs/guides/react-pdf.md +++ b/docs/guides/react-pdf.md @@ -14,7 +14,7 @@ starter needs no PDF server or account. [Edit source online](../assets/react-starter/edit-online.html){ .md-button } [Download the React project](../assets/react-starter/project.zip){ .md-button } -The project uses **fullbleed 0.6.0** with engine **2.5.24**. Its default invoice +The project uses **fullbleed 0.7.1** with engine **2.5.29**. Its default invoice uses typed props, mapped rows, conditional paid text and composed style maps. Text is escaped by the authoring layer; amounts are calculated in integer cents. The form accepts up to 20 rows and whole hours, including negative rates for @@ -76,7 +76,7 @@ color and wait for **Ready**. **Download PDF** saves the generated document. Turn off **Update automatically** to generate only when you choose **Generate PDF**. **Cancel** stops a pending preview or active render. -The lockfile pins Fullbleed npm **0.6.0** / engine **2.5.24**, React **19.3.0**, +The lockfile pins Fullbleed npm **0.7.1** / engine **2.5.29**, React **19.3.0**, TypeScript **7.0.2**, and Vite **8.3.2**. The ZIP includes its source and lockfile; the build downloads the published dependencies and copies their verified runtime. @@ -123,7 +123,7 @@ through the SDK's `fonts` and `assets` options. Install the package and copy its runtime into your app's static directory: ```sh -npm install --save-exact fullbleed@0.6.0 +npm install --save-exact fullbleed@0.7.1 npx fullbleed-browser-assets public/fullbleed ``` diff --git a/docs/guides/vue-pdf.md b/docs/guides/vue-pdf.md index a76795f..2895835 100644 --- a/docs/guides/vue-pdf.md +++ b/docs/guides/vue-pdf.md @@ -47,7 +47,7 @@ color and wait for **Ready**, then choose **Download PDF**. Turn off **Update automatically** to generate on demand. **Cancel** stops a pending preview or active render. **Close editor** releases its resources; reopening starts fresh. -The lockfile pins Fullbleed npm **0.5.1** / engine **2.5.24**, Vue **3.5.43**, +The lockfile pins Fullbleed npm **0.7.1** / engine **2.5.29**, Vue **3.5.43**, TypeScript **6.0.3**, and Vite **8.3.2**. The build downloads the published dependencies and copies their verified runtime. TypeScript 6 is pinned for compatibility with the project's `vue-tsc` type checker. @@ -82,7 +82,7 @@ through the SDK's `fonts` and `assets` options. Install the package and copy its runtime into your static directory: ```sh -npm install --save-exact fullbleed@0.5.1 +npm install --save-exact fullbleed@0.7.1 npx fullbleed-browser-assets public/fullbleed ``` diff --git a/docs/index.md b/docs/index.md index ee1340e..5ddc17a 100644 --- a/docs/index.md +++ b/docs/index.md @@ -159,7 +159,7 @@ Pick your application stack. Generate a PDF locally or download one from the bro ```bash cargo new invoice-demo cd invoice-demo - cargo add fullbleed@=2.5.24 --features svg_raster + cargo add fullbleed@=2.5.29 --features svg_raster ``` Replace `src/main.rs` with: @@ -299,7 +299,7 @@ Fullbleed uses static HTML/CSS as its layout language. Read the [CSS coverage](c ## Open source, with inspectable evidence -Fullbleed is [MIT licensed](https://github.com/fullbleed-engine/fullbleed-official/blob/master/LICENSE). The [2.5.24 release](https://github.com/fullbleed-engine/fullbleed-official/releases/tag/v2.5.24) links the published engine packages and retained engineering evidence. See the [smaller-PDF before/after check](guides/pdf-size.md) and the [performance report](guides/performance.md) for specific measured workloads and their limits. +Fullbleed is [MIT licensed](https://github.com/fullbleed-engine/fullbleed-official/blob/master/LICENSE). The [2.5.29 release](https://github.com/fullbleed-engine/fullbleed-official/releases/tag/v2.5.29) links the published engine packages and retained engineering evidence. See the [smaller-PDF before/after check](guides/pdf-size.md) and the [performance report](guides/performance.md) for specific measured workloads and their limits. [Browse the CSS comparison](guides/css-explorer.md) to inspect printed pages and download PDFs from all 1,662 fixtures, including failures and disputed references. diff --git a/docs/playground.md b/docs/playground.md index efdaf4d..ef6c144 100644 --- a/docs/playground.md +++ b/docs/playground.md @@ -6,7 +6,7 @@ hide: - toc --- - +
Preparing your first PDF…
Loading the examples…
@@ -60,7 +60,7 @@ terminal there, and run: === "Node.js" - Use Node.js 22 or newer. The lockfile pins Fullbleed 0.5.1 and its dependency. + Use Node.js 22 or newer. The lockfile pins Fullbleed 0.7.1 and its dependency. ```bash npm ci --ignore-scripts @@ -69,7 +69,7 @@ terminal there, and run: Open `output/document.pdf`; PNG previews are in `output/preview/`. Edit `input.html` or `style.css`, then run the script again. The project uses Fullbleed -engine 2.5.24 to match this demo. The Node renderer preserves your CSS with +engine 2.5.29 to match this demo. The Node renderer preserves your CSS with `defaultStyles: false`. The ZIP is assembled on your device, using the source present when you click the button. It does not upload your document. @@ -92,7 +92,7 @@ or `notice`. You can keep editing and add `--watch` to rebuild after each save. [Run the Python notebook](getting-started/notebook.md){ .md-button } [CSS support](css-coverage.md){ .md-button } -The playground uses the released **Fullbleed 2.5.24** Rust engine, compiled to +The playground uses the released **Fullbleed 2.5.29** Rust engine, compiled to WebAssembly. Page previews are rendered from the same PDF you download, including the report's gradient chart fills. It accepts static HTML/CSS, with Inter, DM Serif Display, and Bebas Neue embedded fonts. JavaScript @@ -112,10 +112,10 @@ fictional. · [Native/WASI fixture checks](assets/playground/verification.json) · [Project download checks](assets/playground/project-verification.json) · [Node project checks](assets/playground/node-project-verification.json) -· [Release upgrade checks](assets/playground/upgrade-verification.json) +· [Release upgrade checks](assets/playground/upgrade-verification-071.json) · [Third-party licenses](assets/playground/LICENSES.txt) - + Build this into your own web app: [download the browser SDK starter](guides/browser-pdf.md), with editable templates and local PDF downloads. diff --git a/examples/rust/Cargo.lock b/examples/rust/Cargo.lock index 1a135fa..9f84a04 100644 --- a/examples/rust/Cargo.lock +++ b/examples/rust/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "fullbleed" -version = "2.5.24" +version = "2.5.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "667e051d5273d2c2818fcd6a0bad49d655df65fb9442988e46e6ef15376d406f" +checksum = "f266ce8efb4ccf38a8d9c809173720773aa5af95d7035bbe41372ff5be3d0f67" dependencies = [ "fullbleed_audit_contract", "subsetter", diff --git a/examples/rust/Cargo.toml b/examples/rust/Cargo.toml index 19e3d11..60b6f57 100644 --- a/examples/rust/Cargo.toml +++ b/examples/rust/Cargo.toml @@ -7,7 +7,7 @@ license = "MIT" publish = false [dependencies] -fullbleed = { version = "=2.5.24", features = ["svg_raster"] } +fullbleed = { version = "=2.5.29", features = ["svg_raster"] } [[bin]] name = "hello" diff --git a/examples/rust/README.md b/examples/rust/README.md index f55f802..202eb8b 100644 --- a/examples/rust/README.md +++ b/examples/rust/README.md @@ -1,6 +1,6 @@ # Fullbleed from Rust -These examples use the published `fullbleed` 2.5.24 crate with `svg_raster` +These examples use the published `fullbleed` 2.5.29 crate with `svg_raster` enabled to match downloaded playground projects. They require Rust 1.85 or newer and a working native Rust toolchain; they do not require Python. diff --git a/examples/rust/STARTER.md b/examples/rust/STARTER.md index 98a802d..18f62fc 100644 --- a/examples/rust/STARTER.md +++ b/examples/rust/STARTER.md @@ -64,7 +64,7 @@ PDF bytes from your handler or write them to your storage. Use the full [Rust walkthrough](https://docs.fullbleed.dev/getting-started/rust/) for font registration and preview details. -The project pins the published `fullbleed` crate to 2.5.24 with `svg_raster` +The project pins the published `fullbleed` crate to 2.5.29 with `svg_raster` enabled, matching the playground. `Cargo.lock` records the resolved dependency versions. No local Fullbleed checkout is required. The code and templates are MIT licensed; the fonts are SIL OFL 1.1. diff --git a/mkdocs.yml b/mkdocs.yml index bb10088..7ea81d8 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -7,6 +7,7 @@ repo_name: Fullbleed on GitHub edit_uri: '' theme: name: material + favicon: assets/brand/fullbleed-print-mark.svg custom_dir: overrides font: false palette: diff --git a/playground/README.md b/playground/README.md index 4c87020..bb33b17 100644 --- a/playground/README.md +++ b/playground/README.md @@ -1,6 +1,6 @@ # Fullbleed browser playground -An optional static website adapter for the unchanged published `fullbleed = 2.5.22` +An optional static website adapter for the unchanged published `fullbleed = 2.5.29` Rust crate with the `svg_raster` feature. It compiles to `wasm32-wasip1` and runs inside a Web Worker using `@bjorn3/browser_wasi_shim` 0.4.2. It adds no dependencies to the Python wheel or the core Rust crate. The engine produces the PDF, then renders PNG page previews @@ -47,7 +47,7 @@ or ISO conformance. **Download project** captures the current editor values into a ZIP with the fonts and their licenses, dependencies pinned to the built engine version, a Python or Node.js runner, and a file-hash manifest. The Node project locks -`fullbleed@0.5.0` (engine 2.5.22), uses `defaultStyles: false` to retain the +`fullbleed@0.7.1` (engine 2.5.29), uses `defaultStyles: false` to retain the template's CSS cascade, and runs with `npm ci --ignore-scripts` followed by `npm run render`. Exporting uses only static GET requests for bundled assets; the document stays in the browser. It captures source at the @@ -60,7 +60,7 @@ are checked against the existing attribution manifest before export. After building the playground, verify the complete handoff with: ```sh -python -m pip install fullbleed==2.5.22 pypdf==6.19.0 +python -m pip install fullbleed==2.5.29 pypdf==6.19.0 node tools/verify_project_export.mjs python -I tools/verify_project_export.py python -I tools/verify_node_project_export.py diff --git a/playground/engine/Cargo.lock b/playground/engine/Cargo.lock index ed07400..ec544bb 100644 --- a/playground/engine/Cargo.lock +++ b/playground/engine/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "fullbleed" -version = "2.5.24" +version = "2.5.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "667e051d5273d2c2818fcd6a0bad49d655df65fb9442988e46e6ef15376d406f" +checksum = "f266ce8efb4ccf38a8d9c809173720773aa5af95d7035bbe41372ff5be3d0f67" dependencies = [ "fullbleed_audit_contract", "subsetter", diff --git a/playground/engine/Cargo.toml b/playground/engine/Cargo.toml index dad6f4e..664d51d 100644 --- a/playground/engine/Cargo.toml +++ b/playground/engine/Cargo.toml @@ -6,7 +6,7 @@ license = "MIT" publish = false [dependencies] -fullbleed = { version = "=2.5.24", features = ["svg_raster"] } +fullbleed = { version = "=2.5.29", features = ["svg_raster"] } [profile.release] lto = true diff --git a/playground/engine/src/main.rs b/playground/engine/src/main.rs index 8f51c36..48b8a4e 100644 --- a/playground/engine/src/main.rs +++ b/playground/engine/src/main.rs @@ -36,7 +36,7 @@ fn render() -> Result<(), Box