@lupinum/nuxt-pdf 0.4.0-beta.3 → 0.4.0-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +34 -0
- package/CONFORMANCE.md +10 -4
- package/README.md +28 -0
- package/dist/agent/AGENTS.md +48 -0
- package/dist/agent/manifest.json +215 -0
- package/dist/agent/pages/docs/examples/supported-behavior.md +75 -0
- package/dist/agent/pages/docs/examples.md +163 -0
- package/dist/agent/pages/docs/getting-started/installation.md +90 -0
- package/dist/agent/pages/docs/getting-started/quickstart.md +126 -0
- package/dist/agent/pages/docs/getting-started.md +61 -0
- package/dist/agent/pages/docs/guides/contents-links-bookmarks.md +123 -0
- package/dist/agent/pages/docs/guides/deployment.md +118 -0
- package/dist/agent/pages/docs/guides/errors-and-debugging.md +90 -0
- package/dist/agent/pages/docs/guides/images-and-fonts.md +102 -0
- package/dist/agent/pages/docs/guides/recipes.md +258 -0
- package/dist/agent/pages/docs/guides/remote-images.md +72 -0
- package/dist/agent/pages/docs/guides/reusable-components.md +81 -0
- package/dist/agent/pages/docs/guides/standalone-node.md +107 -0
- package/dist/agent/pages/docs/guides/svg-graphics.md +165 -0
- package/dist/agent/pages/docs/guides/testing.md +119 -0
- package/dist/agent/pages/docs/learn/document-tree.md +91 -0
- package/dist/agent/pages/docs/learn/runtime-and-data.md +63 -0
- package/dist/agent/pages/docs/learn/styling-and-layout.md +79 -0
- package/dist/agent/pages/docs/learn/templates-and-registry.md +96 -0
- package/dist/agent/pages/docs/reference/composables.md +55 -0
- package/dist/agent/pages/docs/reference/define-pdf.md +96 -0
- package/dist/agent/pages/docs/reference/errors-and-limits.md +89 -0
- package/dist/agent/pages/docs/reference/module-options.md +104 -0
- package/dist/agent/pages/docs/reference/page-sizes.md +54 -0
- package/dist/agent/pages/docs/reference/primitives.md +216 -0
- package/dist/agent/pages/docs/reference/registry.md +185 -0
- package/dist/agent/pages/docs/reference/standalone.md +53 -0
- package/dist/agent/pages/docs/reference/styles.md +176 -0
- package/dist/agent/pages/docs/reference/test-utilities.md +124 -0
- package/dist/build.mjs +2 -2
- package/dist/module.json +1 -1
- package/dist/module.mjs +14 -11
- package/dist/runtime/components/stubs.d.ts +22 -10
- package/dist/runtime/components/stubs.js +22 -27
- package/dist/runtime/server/assets/resolve-asset.js +2 -40
- package/dist/runtime/server/preview.js +1 -1
- package/dist/shared/{nuxt-pdf.DMC_Rdsz.mjs → nuxt-pdf.C-E8MM_K.mjs} +1 -0
- package/dist/shared/{nuxt-pdf.D3hUPqOJ.mjs → nuxt-pdf.CjVyPF31.mjs} +2 -2
- package/dist/test.mjs +1 -1
- package/package.json +17 -13
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,40 @@ All notable changes to `@lupinum/nuxt-pdf` are recorded here. The format follows
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project adheres
|
|
5
5
|
to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## 0.4.0-beta.5
|
|
8
|
+
|
|
9
|
+
[compare changes](https://github.com/lupinum-dev/nuxt-pdf/compare/v0.4.0-beta.4...0.4.0-beta.5)
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **docs:** Ship versioned package guidance ([ca81a32](https://github.com/lupinum-dev/nuxt-pdf/commit/ca81a32))
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- **deps:** Clear workspace advisories and update Vitest ([#59](https://github.com/lupinum-dev/nuxt-pdf/pull/59))
|
|
18
|
+
|
|
19
|
+
## 0.4.0-beta.4
|
|
20
|
+
|
|
21
|
+
[compare changes](https://github.com/lupinum-dev/nuxt-pdf/compare/v0.4.0-beta.3...0.4.0-beta.4)
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- **deps:** Enforce quarantine in package consumers ([#48](https://github.com/lupinum-dev/nuxt-pdf/pull/48))
|
|
26
|
+
- **assets:** Revalidate disk images across renders ([#49](https://github.com/lupinum-dev/nuxt-pdf/pull/49))
|
|
27
|
+
- **dev:** Export registered PDF component guards ([#50](https://github.com/lupinum-dev/nuxt-pdf/pull/50))
|
|
28
|
+
- **preview:** Rebuild watched templates before refreshing ([#51](https://github.com/lupinum-dev/nuxt-pdf/pull/51))
|
|
29
|
+
- **release:** Bind package evidence to its source graph ([#52](https://github.com/lupinum-dev/nuxt-pdf/pull/52))
|
|
30
|
+
|
|
31
|
+
### Maintenance
|
|
32
|
+
|
|
33
|
+
- **maintenance:** Verify PDF commands without repeated work ([#53](https://github.com/lupinum-dev/nuxt-pdf/pull/53))
|
|
34
|
+
|
|
35
|
+
### Tests
|
|
36
|
+
|
|
37
|
+
- **compatibility:** Verify declared PDF consumer versions ([#54](https://github.com/lupinum-dev/nuxt-pdf/pull/54))
|
|
38
|
+
- **assets:** Describe per-render disk validation ([#55](https://github.com/lupinum-dev/nuxt-pdf/pull/55))
|
|
39
|
+
- **production:** Tolerate fixture text whitespace ([#56](https://github.com/lupinum-dev/nuxt-pdf/pull/56))
|
|
40
|
+
|
|
7
41
|
## 0.4.0-beta.3 - 2026-09-03
|
|
8
42
|
|
|
9
43
|
### Added
|
package/CONFORMANCE.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
# Nuxt PDF 0.4.0-beta.
|
|
1
|
+
# Nuxt PDF 0.4.0-beta.5 conformance
|
|
2
2
|
|
|
3
3
|
Nuxt PDF claims behavioral compatibility for a deliberately small, tested
|
|
4
4
|
corpus. It does not claim full React PDF API or test-suite compatibility.
|
|
5
5
|
|
|
6
6
|
## Version boundary
|
|
7
7
|
|
|
8
|
-
| Layer | 0.4.0-beta.
|
|
8
|
+
| Layer | 0.4.0-beta.5 boundary |
|
|
9
9
|
|---|---|
|
|
10
10
|
| Node.js | `^22.14.0`, `^24.0.0`, or `^26.0.0` |
|
|
11
11
|
| Nuxt | `^4.4.8` |
|
|
@@ -217,7 +217,7 @@ checking.
|
|
|
217
217
|
|
|
218
218
|
### Vue and Nuxt authoring
|
|
219
219
|
|
|
220
|
-
The 0.4.0-beta.
|
|
220
|
+
The 0.4.0-beta.5 tests verify:
|
|
221
221
|
|
|
222
222
|
- `PdfDocument`, `PdfPage`, `PdfView`, `PdfText`, `PdfImage`, `PdfLink`, and
|
|
223
223
|
`PdfNote`;
|
|
@@ -261,6 +261,10 @@ The 0.4.0-beta.2 tests verify:
|
|
|
261
261
|
content type;
|
|
262
262
|
- development preview index, viewer, raw PDF, and named scenarios, backed by a
|
|
263
263
|
separate internal development sidecar;
|
|
264
|
+
- development guards for every global PDF component, including Nuxt
|
|
265
|
+
auto-import misuse outside a PDF template;
|
|
266
|
+
- watched template rebuilds and whole-viewer refreshes that keep the selected
|
|
267
|
+
scenario and replace document bytes with their matching diagnostics;
|
|
264
268
|
- a production Nitro route rendering through the generated registry;
|
|
265
269
|
- structural removal of `sampleData` and `scenarios` during production SFC
|
|
266
270
|
compilation, with unique fixture canaries and preview-only API tokens rejected
|
|
@@ -342,6 +346,8 @@ shows up without a restart. The tested boundary includes:
|
|
|
342
346
|
- TTF, OTF, and WOFF2 signature/extension/structure validation,
|
|
343
347
|
registration validation, source byte limits, and source-removal rendering;
|
|
344
348
|
- explicit local `pdfs/assets` and `pdfs/fonts` roots;
|
|
349
|
+
- independent image validation across roots and after same-size,
|
|
350
|
+
same-timestamp development edits;
|
|
345
351
|
- rejection of absolute paths, traversal, missing assets, ambiguous sources,
|
|
346
352
|
unsupported URLs, and symlink escapes; and
|
|
347
353
|
- font rendering after its source file is removed, and image resolution from
|
|
@@ -450,7 +456,7 @@ parser, not two. Claimed:
|
|
|
450
456
|
Verified end-to-end against a real rendered template, including assertion
|
|
451
457
|
failure messages, in `test/test-utils-public.test.ts`.
|
|
452
458
|
|
|
453
|
-
## Explicitly not claimed in 0.4.0-beta.
|
|
459
|
+
## Explicitly not claimed in 0.4.0-beta.5
|
|
454
460
|
|
|
455
461
|
- Full React PDF component, hook, browser-helper, or test-suite parity.
|
|
456
462
|
- React runtime compatibility or React-shaped dynamic callback results.
|
package/README.md
CHANGED
|
@@ -73,6 +73,34 @@ export default defineNuxtConfig({
|
|
|
73
73
|
})
|
|
74
74
|
```
|
|
75
75
|
|
|
76
|
+
<!-- BEGIN:consumer-onboarding -->
|
|
77
|
+
|
|
78
|
+
### Use a coding agent
|
|
79
|
+
|
|
80
|
+
A coding agent is a development tool that can inspect and change your project.
|
|
81
|
+
After installation, copy this prompt into your coding agent:
|
|
82
|
+
|
|
83
|
+
```text
|
|
84
|
+
Add Nuxt PDF to this Nuxt application and render one PDF from a Vue template.
|
|
85
|
+
Read the project's existing instructions first. Resolve
|
|
86
|
+
@lupinum/nuxt-pdf/agent-docs from this application's directory and read its
|
|
87
|
+
starting pages. Use the installed version's examples and public types. Preserve
|
|
88
|
+
existing routes, security limits, conventions, and AGENTS.md instructions. Add
|
|
89
|
+
or update one short Nuxt PDF pointer in AGENTS.md if the project allows it; do
|
|
90
|
+
not duplicate the documentation. If the file is absent, create only that
|
|
91
|
+
pointer. Report missing guidance. Verify the server route, PDF output, and one
|
|
92
|
+
invalid request.
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
If the installed package has no `agent-docs` export, read its packaged README,
|
|
96
|
+
types, and `CONFORMANCE.md`. Use documentation from the matching source tag when
|
|
97
|
+
more detail is needed. Installing or updating the package does not edit project
|
|
98
|
+
instructions. The pointer resolves the installed package, so upgrades and
|
|
99
|
+
rollbacks select the matching documentation without copying it into your
|
|
100
|
+
application.
|
|
101
|
+
|
|
102
|
+
<!-- END:consumer-onboarding -->
|
|
103
|
+
|
|
76
104
|
## Quick start
|
|
77
105
|
|
|
78
106
|
Create `pdfs/invoice.vue`:
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# @lupinum/nuxt-pdf
|
|
2
|
+
|
|
3
|
+
Documentation for installed version 0.4.0-beta.5.
|
|
4
|
+
|
|
5
|
+
Read the relevant local pages before changing this package’s integration.
|
|
6
|
+
Project instructions govern architecture, style and permissions.
|
|
7
|
+
|
|
8
|
+
## Start here
|
|
9
|
+
|
|
10
|
+
- [Install Nuxt PDF](./pages/docs/getting-started/installation.md) — /docs/getting-started/installation
|
|
11
|
+
- [Module options](./pages/docs/reference/module-options.md) — /docs/reference/module-options
|
|
12
|
+
|
|
13
|
+
## Find a page
|
|
14
|
+
|
|
15
|
+
The index below maps public documentation routes to this installed snapshot.
|
|
16
|
+
For links to this documentation site, use the matching local page in manifest.json
|
|
17
|
+
instead of fetching a possibly different website version. Preserve URL fragments.
|
|
18
|
+
External dependencies have their own versioned contracts. Report missing guidance.
|
|
19
|
+
|
|
20
|
+
- [Example gallery](./pages/docs/examples.md) — /docs/examples
|
|
21
|
+
- [Supported behavior and limitations](./pages/docs/examples/supported-behavior.md) — /docs/examples/supported-behavior
|
|
22
|
+
- [Overview](./pages/docs/getting-started.md) — /docs/getting-started
|
|
23
|
+
- [Install Nuxt PDF](./pages/docs/getting-started/installation.md) — /docs/getting-started/installation
|
|
24
|
+
- [Render your first PDF](./pages/docs/getting-started/quickstart.md) — /docs/getting-started/quickstart
|
|
25
|
+
- [Add links, bookmarks, and a table of contents](./pages/docs/guides/contents-links-bookmarks.md) — /docs/guides/contents-links-bookmarks
|
|
26
|
+
- [Deploy and operate](./pages/docs/guides/deployment.md) — /docs/guides/deployment
|
|
27
|
+
- [Diagnose render failures](./pages/docs/guides/errors-and-debugging.md) — /docs/guides/errors-and-debugging
|
|
28
|
+
- [Add images and fonts](./pages/docs/guides/images-and-fonts.md) — /docs/guides/images-and-fonts
|
|
29
|
+
- [Production recipes](./pages/docs/guides/recipes.md) — /docs/guides/recipes
|
|
30
|
+
- [Configure remote images](./pages/docs/guides/remote-images.md) — /docs/guides/remote-images
|
|
31
|
+
- [Build reusable document components](./pages/docs/guides/reusable-components.md) — /docs/guides/reusable-components
|
|
32
|
+
- [Render outside Nitro](./pages/docs/guides/standalone-node.md) — /docs/guides/standalone-node
|
|
33
|
+
- [Draw SVG graphics](./pages/docs/guides/svg-graphics.md) — /docs/guides/svg-graphics
|
|
34
|
+
- [Test a PDF](./pages/docs/guides/testing.md) — /docs/guides/testing
|
|
35
|
+
- [The document tree](./pages/docs/learn/document-tree.md) — /docs/learn/document-tree
|
|
36
|
+
- [Runtime and data loading](./pages/docs/learn/runtime-and-data.md) — /docs/learn/runtime-and-data
|
|
37
|
+
- [Styling and layout](./pages/docs/learn/styling-and-layout.md) — /docs/learn/styling-and-layout
|
|
38
|
+
- [Templates and the registry](./pages/docs/learn/templates-and-registry.md) — /docs/learn/templates-and-registry
|
|
39
|
+
- [Composables](./pages/docs/reference/composables.md) — /docs/reference/composables
|
|
40
|
+
- [definePdf](./pages/docs/reference/define-pdf.md) — /docs/reference/define-pdf
|
|
41
|
+
- [Errors and limits](./pages/docs/reference/errors-and-limits.md) — /docs/reference/errors-and-limits
|
|
42
|
+
- [Module options](./pages/docs/reference/module-options.md) — /docs/reference/module-options
|
|
43
|
+
- [Page sizes](./pages/docs/reference/page-sizes.md) — /docs/reference/page-sizes
|
|
44
|
+
- [Primitives](./pages/docs/reference/primitives.md) — /docs/reference/primitives
|
|
45
|
+
- [Registry and render result](./pages/docs/reference/registry.md) — /docs/reference/registry
|
|
46
|
+
- [Standalone build and runtime](./pages/docs/reference/standalone.md) — /docs/reference/standalone
|
|
47
|
+
- [Styles](./pages/docs/reference/styles.md) — /docs/reference/styles
|
|
48
|
+
- [Test utilities](./pages/docs/reference/test-utilities.md) — /docs/reference/test-utilities
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"name": "@lupinum/nuxt-pdf",
|
|
4
|
+
"version": "0.4.0-beta.5",
|
|
5
|
+
"entrySha256": "51269576487bbfde32f8e920ae5e3cb6915af6d39f4da33149bbe87695507ee9",
|
|
6
|
+
"startRoutes": [
|
|
7
|
+
"/docs/getting-started/installation",
|
|
8
|
+
"/docs/reference/module-options"
|
|
9
|
+
],
|
|
10
|
+
"pages": [
|
|
11
|
+
{
|
|
12
|
+
"title": "Example gallery",
|
|
13
|
+
"route": "/docs/examples",
|
|
14
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/examples",
|
|
15
|
+
"file": "pages/docs/examples.md",
|
|
16
|
+
"sha256": "ef7a42c0ce6140e02375fd4435455424d7c6cfea47a68529c6f6d2520d797c8f"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"title": "Supported behavior and limitations",
|
|
20
|
+
"route": "/docs/examples/supported-behavior",
|
|
21
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/examples/supported-behavior",
|
|
22
|
+
"file": "pages/docs/examples/supported-behavior.md",
|
|
23
|
+
"sha256": "a6911a6f48321d1f40367de827d268aa5da563b205066f4558e23f37db96622e"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"title": "Overview",
|
|
27
|
+
"route": "/docs/getting-started",
|
|
28
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/getting-started",
|
|
29
|
+
"file": "pages/docs/getting-started.md",
|
|
30
|
+
"sha256": "2b4b8cf86ebd7f07f4e66050e025e81e0e987ae0f102ac99a9b62e2ec70fc00d"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"title": "Install Nuxt PDF",
|
|
34
|
+
"route": "/docs/getting-started/installation",
|
|
35
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/getting-started/installation",
|
|
36
|
+
"file": "pages/docs/getting-started/installation.md",
|
|
37
|
+
"sha256": "4f5e64077d1de654b6cf073f1dbb8bb28eb81df7955dc74ec99dcf015599f9de"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"title": "Render your first PDF",
|
|
41
|
+
"route": "/docs/getting-started/quickstart",
|
|
42
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/getting-started/quickstart",
|
|
43
|
+
"file": "pages/docs/getting-started/quickstart.md",
|
|
44
|
+
"sha256": "a48711287b894ed1b63d4b8bf3c68afec6d855b42dc317b6d0bc25eac7b861ce"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"title": "Add links, bookmarks, and a table of contents",
|
|
48
|
+
"route": "/docs/guides/contents-links-bookmarks",
|
|
49
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/guides/contents-links-bookmarks",
|
|
50
|
+
"file": "pages/docs/guides/contents-links-bookmarks.md",
|
|
51
|
+
"sha256": "1a1041552abf36aeebbda896890f8f0eedda9802aeeb8b35c525f0306f52827f"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"title": "Deploy and operate",
|
|
55
|
+
"route": "/docs/guides/deployment",
|
|
56
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/guides/deployment",
|
|
57
|
+
"file": "pages/docs/guides/deployment.md",
|
|
58
|
+
"sha256": "86a74925ec588c75ba1ccc08e833203c76a279ddc2ea31936eecd6fd905f274f"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"title": "Diagnose render failures",
|
|
62
|
+
"route": "/docs/guides/errors-and-debugging",
|
|
63
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/guides/errors-and-debugging",
|
|
64
|
+
"file": "pages/docs/guides/errors-and-debugging.md",
|
|
65
|
+
"sha256": "3353c927d400557e6e7b7e861a49abc1a6a01240fa5e9c4a8fd621cc8baa6424"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"title": "Add images and fonts",
|
|
69
|
+
"route": "/docs/guides/images-and-fonts",
|
|
70
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/guides/images-and-fonts",
|
|
71
|
+
"file": "pages/docs/guides/images-and-fonts.md",
|
|
72
|
+
"sha256": "cc31e2b4143060aaa4eaa78092864da7a6e3321a97474815be576497e203ef9c"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"title": "Production recipes",
|
|
76
|
+
"route": "/docs/guides/recipes",
|
|
77
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/guides/recipes",
|
|
78
|
+
"file": "pages/docs/guides/recipes.md",
|
|
79
|
+
"sha256": "5146c107305561922599290216f2eba21dc0ca887a2863376a4ca46ef176e3d9"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"title": "Configure remote images",
|
|
83
|
+
"route": "/docs/guides/remote-images",
|
|
84
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/guides/remote-images",
|
|
85
|
+
"file": "pages/docs/guides/remote-images.md",
|
|
86
|
+
"sha256": "1b7a05b48cfac8049c89d60310c2be078b86689a07968a54f31a0530bea16ee2"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"title": "Build reusable document components",
|
|
90
|
+
"route": "/docs/guides/reusable-components",
|
|
91
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/guides/reusable-components",
|
|
92
|
+
"file": "pages/docs/guides/reusable-components.md",
|
|
93
|
+
"sha256": "9a269143397420d8a879a4657c0ab960d303203af561648d63ba58052eb3519c"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"title": "Render outside Nitro",
|
|
97
|
+
"route": "/docs/guides/standalone-node",
|
|
98
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/guides/standalone-node",
|
|
99
|
+
"file": "pages/docs/guides/standalone-node.md",
|
|
100
|
+
"sha256": "e88d80f0bd0d67a46e6cafad12eb167f7a1377b56015686ffd131dc0f49dc55e"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"title": "Draw SVG graphics",
|
|
104
|
+
"route": "/docs/guides/svg-graphics",
|
|
105
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/guides/svg-graphics",
|
|
106
|
+
"file": "pages/docs/guides/svg-graphics.md",
|
|
107
|
+
"sha256": "bbec519d3597b93b61b3c9e51f1b225ddf4cdecb96a311e6320ca68db309a313"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"title": "Test a PDF",
|
|
111
|
+
"route": "/docs/guides/testing",
|
|
112
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/guides/testing",
|
|
113
|
+
"file": "pages/docs/guides/testing.md",
|
|
114
|
+
"sha256": "6682ecc97f05cb034ca9ca3c066312b340847daf4ce96c239977d9b222310a9b"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"title": "The document tree",
|
|
118
|
+
"route": "/docs/learn/document-tree",
|
|
119
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/learn/document-tree",
|
|
120
|
+
"file": "pages/docs/learn/document-tree.md",
|
|
121
|
+
"sha256": "68ed0fa2e2e12b4d29314be363d10cb43cb928cfff3480b0210544bfc3d0d436"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"title": "Runtime and data loading",
|
|
125
|
+
"route": "/docs/learn/runtime-and-data",
|
|
126
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/learn/runtime-and-data",
|
|
127
|
+
"file": "pages/docs/learn/runtime-and-data.md",
|
|
128
|
+
"sha256": "9165121817b58159a1d49a2d92c98d40a30b2a78e05f95b28bb7b089ff5dbbcb"
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"title": "Styling and layout",
|
|
132
|
+
"route": "/docs/learn/styling-and-layout",
|
|
133
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/learn/styling-and-layout",
|
|
134
|
+
"file": "pages/docs/learn/styling-and-layout.md",
|
|
135
|
+
"sha256": "9d622634064c18e76e1be2e6dfe33cdff45ff42c249c655fdb5702d846deb851"
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"title": "Templates and the registry",
|
|
139
|
+
"route": "/docs/learn/templates-and-registry",
|
|
140
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/learn/templates-and-registry",
|
|
141
|
+
"file": "pages/docs/learn/templates-and-registry.md",
|
|
142
|
+
"sha256": "89cb41b292e81984bdfd087fe12a6838590b0e38a967d72823c5493a8833c564"
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"title": "Composables",
|
|
146
|
+
"route": "/docs/reference/composables",
|
|
147
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/reference/composables",
|
|
148
|
+
"file": "pages/docs/reference/composables.md",
|
|
149
|
+
"sha256": "cbd079540924ceee433d783ac43d5b4d1d35b15675f0f08f474042650fbc8b9a"
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"title": "definePdf",
|
|
153
|
+
"route": "/docs/reference/define-pdf",
|
|
154
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/reference/define-pdf",
|
|
155
|
+
"file": "pages/docs/reference/define-pdf.md",
|
|
156
|
+
"sha256": "056dc09669d8cc4ea7a9e7e6dc0021e047e39ea546c610893cdcefeca4c0dce2"
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"title": "Errors and limits",
|
|
160
|
+
"route": "/docs/reference/errors-and-limits",
|
|
161
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/reference/errors-and-limits",
|
|
162
|
+
"file": "pages/docs/reference/errors-and-limits.md",
|
|
163
|
+
"sha256": "1b762cb9222cd5f71ab28fdfdb047000bf2359c7aa6702e8fa79b220d4015ea0"
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"title": "Module options",
|
|
167
|
+
"route": "/docs/reference/module-options",
|
|
168
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/reference/module-options",
|
|
169
|
+
"file": "pages/docs/reference/module-options.md",
|
|
170
|
+
"sha256": "7bd4db4121d02c8ec95a8e36788eb769baff4c6260357e1700ce16f35f3cbaad"
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"title": "Page sizes",
|
|
174
|
+
"route": "/docs/reference/page-sizes",
|
|
175
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/reference/page-sizes",
|
|
176
|
+
"file": "pages/docs/reference/page-sizes.md",
|
|
177
|
+
"sha256": "11421ac6d9ead36da06c839022a4be259fcf75f0d6db0d6860cdc5a4acaf2fbf"
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"title": "Primitives",
|
|
181
|
+
"route": "/docs/reference/primitives",
|
|
182
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/reference/primitives",
|
|
183
|
+
"file": "pages/docs/reference/primitives.md",
|
|
184
|
+
"sha256": "10d1ab379ffd44aae6a1f28123824ab1b8708809bc503a223c27ac31c0e97236"
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"title": "Registry and render result",
|
|
188
|
+
"route": "/docs/reference/registry",
|
|
189
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/reference/registry",
|
|
190
|
+
"file": "pages/docs/reference/registry.md",
|
|
191
|
+
"sha256": "a37db3268164ecb17745c18f6ef008fd24e8e568d24eed8747bdfcd169e311fb"
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"title": "Standalone build and runtime",
|
|
195
|
+
"route": "/docs/reference/standalone",
|
|
196
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/reference/standalone",
|
|
197
|
+
"file": "pages/docs/reference/standalone.md",
|
|
198
|
+
"sha256": "cd7b4e5e68c372fb1ca4f02642abad01040d115504f6eb18ff307d94f495cf4d"
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"title": "Styles",
|
|
202
|
+
"route": "/docs/reference/styles",
|
|
203
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/reference/styles",
|
|
204
|
+
"file": "pages/docs/reference/styles.md",
|
|
205
|
+
"sha256": "b59ef442049b49504b3f0938c89baeff4ebbbe0522d36e18be2ab2a6a32d6eb8"
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"title": "Test utilities",
|
|
209
|
+
"route": "/docs/reference/test-utilities",
|
|
210
|
+
"url": "https://nuxt-pdf.lupinum.com/docs/reference/test-utilities",
|
|
211
|
+
"file": "pages/docs/reference/test-utilities.md",
|
|
212
|
+
"sha256": "81dc793263f88b0238fcba3717afa4a2b829e8f7bbdb713ec312e2b43b44ca1a"
|
|
213
|
+
}
|
|
214
|
+
]
|
|
215
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Supported behavior and limitations"
|
|
3
|
+
description: "The public compatibility boundary and where to find its executable evidence."
|
|
4
|
+
url: "https://nuxt-pdf.lupinum.com/docs/examples/supported-behavior"
|
|
5
|
+
route: "/docs/examples/supported-behavior"
|
|
6
|
+
locale: "en"
|
|
7
|
+
section: "Documentation"
|
|
8
|
+
collection: "docs"
|
|
9
|
+
source: "ginko-content"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Supported behavior and limitations
|
|
13
|
+
|
|
14
|
+
> The public compatibility boundary and where to find its executable evidence.
|
|
15
|
+
|
|
16
|
+
Nuxt PDF supports the behavior listed in its public guides and reference pages
|
|
17
|
+
against exact pinned layout, font, and serialization packages. It does not claim
|
|
18
|
+
the complete React PDF API or test suite.
|
|
19
|
+
|
|
20
|
+
## Supported areas
|
|
21
|
+
|
|
22
|
+
The repository tests these user-facing areas:
|
|
23
|
+
|
|
24
|
+
- document trees, pagination, flex layout, styles, text, and raster images;
|
|
25
|
+
- local fonts and admitted local or allowlisted remote image sources;
|
|
26
|
+
- metadata, links, notes, bookmarks, and destination page numbers;
|
|
27
|
+
- SVG shapes, gradients, clip paths, transforms, and SVG text;
|
|
28
|
+
- semantic PDF inspection and raster snapshot helpers;
|
|
29
|
+
- production removal of preview routes and preview data;
|
|
30
|
+
- bounded render time, tree size, image admission, page count, and output size.
|
|
31
|
+
|
|
32
|
+
The detailed support status for scripts and fonts is in
|
|
33
|
+
[Add images and fonts](/raw/docs/guides/images-and-fonts.md). Exact primitive and style
|
|
34
|
+
support belongs to the [reference section](/raw/docs/reference/primitives.md).
|
|
35
|
+
|
|
36
|
+
## Differences from React PDF
|
|
37
|
+
|
|
38
|
+
Three behaviors differ where matching the pinned lower engine would produce a
|
|
39
|
+
wrong or unstable public result:
|
|
40
|
+
|
|
41
|
+
- A table-of-contents destination resolves to the section's first page.
|
|
42
|
+
- Dynamic page text does not inherit a `lineHeight` multiplier. Apply line
|
|
43
|
+
height to static `PdfText` instead.
|
|
44
|
+
- Explicit zero values keep SVG meaning for fill opacity, stroke width, and
|
|
45
|
+
supported gradient coordinates.
|
|
46
|
+
|
|
47
|
+
These differences have geometry or raster regression coverage.
|
|
48
|
+
|
|
49
|
+
## Outside the current boundary
|
|
50
|
+
|
|
51
|
+
Nuxt PDF does not claim:
|
|
52
|
+
|
|
53
|
+
- full React PDF API, hook, browser-helper, or runtime compatibility;
|
|
54
|
+
- Nuxt 3, Node 20, browser rendering, or edge rendering;
|
|
55
|
+
- HTML printing, browser CSS, tables, charts, forms, signing, editing, or PDF
|
|
56
|
+
merging as built-in features;
|
|
57
|
+
- tagged PDF, PDF/UA, or archival compliance profiles;
|
|
58
|
+
- byte-identical output across operating systems and viewers;
|
|
59
|
+
- authenticated remote requests, custom headers, remote fonts, or SSRF
|
|
60
|
+
protection beyond the exact-prefix allowlist;
|
|
61
|
+
- SVG image files, SVG markers, or the complete browser SVG model;
|
|
62
|
+
- multi-pass resolution of values other than destination page numbers.
|
|
63
|
+
|
|
64
|
+
## Evidence record
|
|
65
|
+
|
|
66
|
+
This page is the public summary. Maintainers and reviewers can inspect:
|
|
67
|
+
|
|
68
|
+
- [CONFORMANCE.md](https://github.com/lupinum-dev/nuxt-pdf/blob/main/CONFORMANCE.md)
|
|
69
|
+
for version pins, paired comparisons, tested fixtures, and explicit
|
|
70
|
+
non-claims;
|
|
71
|
+
- [CONTRACTS.md](https://github.com/lupinum-dev/nuxt-pdf/blob/main/src/runtime/server/engine/CONTRACTS.md)
|
|
72
|
+
for the renderer's durable engine contracts.
|
|
73
|
+
|
|
74
|
+
When the documentation and public source disagree, the source is authoritative
|
|
75
|
+
and the documentation needs a correction.
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Example gallery"
|
|
3
|
+
description: "Six playground templates and the technique that each template demonstrates."
|
|
4
|
+
url: "https://nuxt-pdf.lupinum.com/docs/examples"
|
|
5
|
+
route: "/docs/examples"
|
|
6
|
+
locale: "en"
|
|
7
|
+
section: "Documentation"
|
|
8
|
+
collection: "docs"
|
|
9
|
+
source: "ginko-content"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Example gallery
|
|
13
|
+
|
|
14
|
+
> Six playground templates and the technique that each template demonstrates.
|
|
15
|
+
|
|
16
|
+
The playground under `playground/pdfs/` ships six complete templates. Each is an
|
|
17
|
+
ordinary `.vue` single-file component discovered by the module, rendered through
|
|
18
|
+
the same registry in development and production, and covered by an end-to-end
|
|
19
|
+
rendering test. Selected visually load-bearing showcases additionally compare
|
|
20
|
+
reviewed raster baselines. Run `pnpm dev` and open `/_pdf` to browse them, or
|
|
21
|
+
read each source alongside the excerpts below.
|
|
22
|
+
|
|
23
|
+
<info icon="lucide:info">
|
|
24
|
+
`renderPdfSfc` compiles the same nested child-SFC graph as the production Nuxt
|
|
25
|
+
module. The packed-package gate exercises typed child props, a local image, and
|
|
26
|
+
multiple local font faces.
|
|
27
|
+
</info>
|
|
28
|
+
|
|
29
|
+
## At a glance
|
|
30
|
+
|
|
31
|
+
| Template | Source | Demonstrates |
|
|
32
|
+
| --- | --- | --- |
|
|
33
|
+
| Invoice | `pdfs/invoice.vue` | Typed props, computed totals, a fixed footer, dynamic page count |
|
|
34
|
+
| Report | `pdfs/report.vue` | `usePdfPageNumbers` table of contents, internal links, bookmarks |
|
|
35
|
+
| Annual report | `pdfs/annual-report.vue` | SVG bar / line / donut charts and tables drawn from Views |
|
|
36
|
+
| Certificate | `pdfs/certificate.vue` | SVG ornament craft with an engraver's border and a seal |
|
|
37
|
+
| E-book | `pdfs/ebook.vue` | `usePdfPageNumbers` with chapter-aware running matter |
|
|
38
|
+
| Menu | `pdfs/menu.vue` | Pure typography, diacritics, dotted leaders, tabular prices |
|
|
39
|
+
|
|
40
|
+
## E-book with chapter-aware running matter
|
|
41
|
+
|
|
42
|
+
_The Reed Line_ is a 21-page digest novella. It reads the resolved page map from
|
|
43
|
+
[`usePdfPageNumbers`](/raw/docs/reference/composables.md) twice: once to print a
|
|
44
|
+
Contents page with real page numbers, and once for a running foot that names the
|
|
45
|
+
**current** chapter on every page it repeats onto. The chapter is derived from
|
|
46
|
+
measured pagination, never hard-coded.
|
|
47
|
+
|
|
48
|
+
```vue [pdfs/ebook.vue]
|
|
49
|
+
const pageNumbers = usePdfPageNumbers()
|
|
50
|
+
|
|
51
|
+
// Derive the current chapter for any page from the resolved start-page map.
|
|
52
|
+
const chapterAt = (pageNumber: number): Ebook['chapters'][number] => {
|
|
53
|
+
let current = ebook.chapters[0]!
|
|
54
|
+
for (const chapter of ebook.chapters) {
|
|
55
|
+
const start = pageNumbers[chapter.id]
|
|
56
|
+
if (typeof start === 'number' && start <= pageNumber) current = chapter
|
|
57
|
+
}
|
|
58
|
+
return current
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
The foot is a single `fixed` node whose `:render` closes over `chapterAt`, so one
|
|
63
|
+
callback prints the right chapter and folio on every page:
|
|
64
|
+
|
|
65
|
+
```vue [pdfs/ebook.vue]
|
|
66
|
+
<PdfText
|
|
67
|
+
fixed
|
|
68
|
+
:render="({ pageNumber }) => `${chapterAt(pageNumber).title} · ${pageNumber}`"
|
|
69
|
+
:style="footStyle"
|
|
70
|
+
/>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Annual report with SVG charts and View tables
|
|
74
|
+
|
|
75
|
+
The Fieldnote Studio annual report draws a grouped bar chart, a line chart with a
|
|
76
|
+
gradient area tint, and a donut. It uses the [SVG primitives](/raw/docs/guides/svg-graphics.md),
|
|
77
|
+
with every figure computed from one canonical `YearFigures` source. The donut
|
|
78
|
+
segments come from a pure geometry model and render as a `v-for` of paths:
|
|
79
|
+
|
|
80
|
+
```vue [pdfs/annual-report.vue]
|
|
81
|
+
<PdfSvg :viewBox="`0 0 ${donut.size} ${donut.size}`" :style="{ width: donut.size, height: donut.size }">
|
|
82
|
+
<PdfPath
|
|
83
|
+
v-for="segment in donut.segments"
|
|
84
|
+
:key="segment.id"
|
|
85
|
+
:d="segment.d"
|
|
86
|
+
:fill="segment.fill"
|
|
87
|
+
:transform="segment.transform"
|
|
88
|
+
/>
|
|
89
|
+
</PdfSvg>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
The financial statement has no first-class table primitive. It uses
|
|
93
|
+
`View` rows with right-aligned tabular numerals, hairline rules above totals, and
|
|
94
|
+
parenthesised outflows. The quarter and sector breakdowns provably sum to the
|
|
95
|
+
yearly totals (asserted in the template's test).
|
|
96
|
+
|
|
97
|
+
## Certificate with SVG ornaments
|
|
98
|
+
|
|
99
|
+
The certificate is a single A4 landscape page whose decoration is drawn entirely
|
|
100
|
+
from primitives: a double-rule engraver's border with corner diamonds, and a
|
|
101
|
+
concentric seal with two rules, a 32-dot beaded coin edge, a five-point star, and a
|
|
102
|
+
single bronze `RadialGradient` used once.
|
|
103
|
+
|
|
104
|
+
```vue [pdfs/components/certificate/CertificateSeal.vue]
|
|
105
|
+
<script setup lang="ts">
|
|
106
|
+
// Evenly spaced dots in the band between the two rules.
|
|
107
|
+
const beads = Array.from({ length: 32 }, (_, index) => {
|
|
108
|
+
const angle = (index / 32) * Math.PI * 2 - Math.PI / 2
|
|
109
|
+
return { cx: 50 + 45.2 * Math.cos(angle), cy: 50 + 45.2 * Math.sin(angle) }
|
|
110
|
+
})
|
|
111
|
+
</script>
|
|
112
|
+
|
|
113
|
+
<template>
|
|
114
|
+
<PdfSvg view-box="0 0 100 100">
|
|
115
|
+
<PdfDefs>
|
|
116
|
+
<PdfRadialGradient id="seal-bronze" cx="0.5" cy="0.38" r="0.62">
|
|
117
|
+
<PdfStop offset="0" stop-color="#E7CC86" />
|
|
118
|
+
<PdfStop offset="0.55" stop-color="#C9A24B" />
|
|
119
|
+
<PdfStop offset="1" stop-color="#8A6A2F" />
|
|
120
|
+
</PdfRadialGradient>
|
|
121
|
+
</PdfDefs>
|
|
122
|
+
<PdfCircle
|
|
123
|
+
v-for="(bead, index) in beads"
|
|
124
|
+
:key="`bead-${index}`"
|
|
125
|
+
:cx="bead.cx"
|
|
126
|
+
:cy="bead.cy"
|
|
127
|
+
:r="0.75"
|
|
128
|
+
/>
|
|
129
|
+
</PdfSvg>
|
|
130
|
+
</template>
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
The decorative layers are absolutely positioned, so a long recipient name wraps
|
|
134
|
+
at spaces to two centered lines and the page can never spill to a second sheet.
|
|
135
|
+
|
|
136
|
+
## Menu with typography and diacritics
|
|
137
|
+
|
|
138
|
+
The Gasthaus Alpenrose card is two A5 pages of typography without borders or
|
|
139
|
+
boxes. German dish names carry their umlauts through rendering and extraction,
|
|
140
|
+
and a flex-`1` dotted leader ties each name to a right-aligned tabular price:
|
|
141
|
+
|
|
142
|
+
```vue [pdfs/menu.vue]
|
|
143
|
+
<PdfView :style="{ alignItems: 'flex-end', flexDirection: 'row' }">
|
|
144
|
+
<PdfText :style="{ fontFamily: 'Inter', fontSize: 10, fontWeight: 600 }">
|
|
145
|
+
{{ dish.name }}
|
|
146
|
+
</PdfText>
|
|
147
|
+
<PdfView :style="{ flex: 1, marginHorizontal: 7, marginBottom: 2,
|
|
148
|
+
borderBottomWidth: 0.75, borderBottomStyle: 'dotted', borderBottomColor: leader }" />
|
|
149
|
+
<PdfText :style="{ fontFamily: 'Inter', fontSize: 10, textAlign: 'right', width: 32 }">
|
|
150
|
+
{{ formatMenuPrice(dish.price) }}
|
|
151
|
+
</PdfText>
|
|
152
|
+
</PdfView>
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Prices use the locale format. For example, `9.5` becomes `9,50`. The whole card
|
|
156
|
+
is data-driven, so the `winter` scenario swaps every dish and pour without
|
|
157
|
+
touching the template.
|
|
158
|
+
|
|
159
|
+
<idea icon="lucide:lightbulb">
|
|
160
|
+
Every template ships `sampleData` and at least one named `scenario`, so the dev
|
|
161
|
+
preview at `/_pdf` can render each one without a live route. See
|
|
162
|
+
[define-pdf](/raw/docs/reference/define-pdf.md) for the definition shape.
|
|
163
|
+
</idea>
|