@embedpdf/angular 3.0.0-next.15 → 3.0.0-next.16

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.
@@ -0,0 +1,67 @@
1
+ import { attachmentState, AttachmentToken, attachmentPlugin } from '@embedpdf/plugin-attachment';
2
+ export * from '@embedpdf/plugin-attachment';
3
+ import * as i0 from '@angular/core';
4
+ import { Injectable } from '@angular/core';
5
+ import { pluginService } from '@embedpdf/angular/runtime';
6
+
7
+ /**
8
+ * The attachment plugin's service and feature: the files a document carries. Reading it reads
9
+ * the document's attachments; the plugin keeps them live off the document's event stream, lists
10
+ * the pages' files with them, and shows your own adds and removes at once:
11
+ *
12
+ * protected readonly attachment = inject(EpdfAttachment);
13
+ * @for (file of attachment.files(); track file.id) { … }
14
+ * (click)="attachment.download(file)" the bytes, a clean name and the type, to save
15
+ */
16
+ /**
17
+ * The files of the document in scope (`[epdfDocumentScope]`), else the active one: the State
18
+ * table as signals (`files()`, `selected()`, `status()`, `canAdd()`, `canDownload()`), the
19
+ * reads that take a file (`get()`, `isPending()`, `canRemove()`), the calls that select, add,
20
+ * remove, save and go to files, and the streams `changed$` and `resynced$`. Reading it reads the attachments. With no
21
+ * document the signals read empty, and every call refuses with `not-ready`.
22
+ */
23
+ class EpdfAttachment extends pluginService({
24
+ name: 'EpdfAttachment',
25
+ feature: 'withAttachment()',
26
+ token: AttachmentToken,
27
+ state: attachmentState,
28
+ methods: [
29
+ 'get',
30
+ 'select',
31
+ 'isPending',
32
+ 'canRemove',
33
+ 'ensureLoaded',
34
+ 'refresh',
35
+ 'add',
36
+ 'remove',
37
+ 'download',
38
+ 'reveal',
39
+ ],
40
+ events: ['onChanged', 'onResynced'],
41
+ }) {
42
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: EpdfAttachment, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
43
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: EpdfAttachment, providedIn: 'root' });
44
+ }
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: EpdfAttachment, decorators: [{
46
+ type: Injectable,
47
+ args: [{ providedIn: 'root' }]
48
+ }] });
49
+ /** The attachments, for `provideEmbedPdf()`. */
50
+ function withAttachment() {
51
+ return { plugins: [attachmentPlugin()], services: [EpdfAttachment] };
52
+ }
53
+
54
+ /**
55
+ * @embedpdf/angular/attachment: the files a document carries.
56
+ *
57
+ * withAttachment() the plugin, for provideEmbedPdf()
58
+ * inject(EpdfAttachment) files(), canAdd(), add(), remove(), download(), changed$, …
59
+ */
60
+ // The plugin's types and helpers, so app code has one import for the feature.
61
+
62
+ /**
63
+ * Generated bundle index. Do not edit.
64
+ */
65
+
66
+ export { EpdfAttachment, withAttachment };
67
+ //# sourceMappingURL=embedpdf-angular-attachment.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedpdf-angular-attachment.mjs","sources":["../../attachment/src/attachment.ts","../../attachment/src/public_api.ts","../../attachment/src/embedpdf-angular-attachment.ts"],"sourcesContent":["/**\n * The attachment plugin's service and feature: the files a document carries. Reading it reads\n * the document's attachments; the plugin keeps them live off the document's event stream, lists\n * the pages' files with them, and shows your own adds and removes at once:\n *\n * protected readonly attachment = inject(EpdfAttachment);\n * @for (file of attachment.files(); track file.id) { … }\n * (click)=\"attachment.download(file)\" the bytes, a clean name and the type, to save\n */\nimport { Injectable } from '@angular/core';\nimport { pluginService, type EmbedPdfFeature } from '@embedpdf/angular/runtime';\nimport { attachmentPlugin, attachmentState, AttachmentToken } from '@embedpdf/plugin-attachment';\n\n/**\n * The files of the document in scope (`[epdfDocumentScope]`), else the active one: the State\n * table as signals (`files()`, `selected()`, `status()`, `canAdd()`, `canDownload()`), the\n * reads that take a file (`get()`, `isPending()`, `canRemove()`), the calls that select, add,\n * remove, save and go to files, and the streams `changed$` and `resynced$`. Reading it reads the attachments. With no\n * document the signals read empty, and every call refuses with `not-ready`.\n */\n@Injectable({ providedIn: 'root' })\nexport class EpdfAttachment extends pluginService({\n name: 'EpdfAttachment',\n feature: 'withAttachment()',\n token: AttachmentToken,\n state: attachmentState,\n methods: [\n 'get',\n 'select',\n 'isPending',\n 'canRemove',\n 'ensureLoaded',\n 'refresh',\n 'add',\n 'remove',\n 'download',\n 'reveal',\n ],\n events: ['onChanged', 'onResynced'],\n}) {}\n\n/** The attachments, for `provideEmbedPdf()`. */\nexport function withAttachment(): EmbedPdfFeature {\n return { plugins: [attachmentPlugin()], services: [EpdfAttachment] };\n}\n","/**\n * @embedpdf/angular/attachment: the files a document carries.\n *\n * withAttachment() the plugin, for provideEmbedPdf()\n * inject(EpdfAttachment) files(), canAdd(), add(), remove(), download(), changed$, …\n */\n\n// The plugin's types and helpers, so app code has one import for the feature.\nexport * from '@embedpdf/plugin-attachment';\nexport * from './attachment';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;AAAA;;;;;;;;AAQG;AAKH;;;;;;AAMG;AAEG,MAAO,cAAe,SAAQ,aAAa,CAAC;AAChD,IAAA,IAAI,EAAE,gBAAgB;AACtB,IAAA,OAAO,EAAE,kBAAkB;AAC3B,IAAA,KAAK,EAAE,eAAe;AACtB,IAAA,KAAK,EAAE,eAAe;AACtB,IAAA,OAAO,EAAE;QACP,KAAK;QACL,QAAQ;QACR,WAAW;QACX,WAAW;QACX,cAAc;QACd,SAAS;QACT,KAAK;QACL,QAAQ;QACR,UAAU;QACV,QAAQ;AACT,KAAA;AACD,IAAA,MAAM,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC;CACpC,CAAC,CAAA;uGAlBW,cAAc,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cADD,MAAM,EAAA,CAAA;;2FACnB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;AAqBlC;SACgB,cAAc,GAAA;AAC5B,IAAA,OAAO,EAAE,OAAO,EAAE,CAAC,gBAAgB,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,cAAc,CAAC,EAAE;AACtE;;AC5CA;;;;;AAKG;AAEH;;ACPA;;AAEG;;;;"}
@@ -0,0 +1,76 @@
1
+ import { outlineState, OutlineToken, outlinePlugin } from '@embedpdf/plugin-outline';
2
+ export * from '@embedpdf/plugin-outline';
3
+ import * as i0 from '@angular/core';
4
+ import { Injectable } from '@angular/core';
5
+ import { pluginService } from '@embedpdf/angular/runtime';
6
+
7
+ /**
8
+ * The outline plugin's service and feature: the document's outline (its bookmarks). Reading it
9
+ * reads the outline; the plugin keeps it live off the document's event stream, and shows your
10
+ * own edits at once:
11
+ *
12
+ * protected readonly outline = inject(EpdfOutline);
13
+ * @for (row of outline.rows(); track row.item.ref.objectNumber) { … }
14
+ * (click)="outline.activate(row.item.ref)" goes where the item goes, as a click does
15
+ */
16
+ /**
17
+ * The outline of the document in scope (`[epdfDocumentScope]`), else the active one: the State
18
+ * table as signals (`items()`, `rows()`, `current()`, `selected()`, `status()`, `incomplete()`,
19
+ * `canEdit()`), the reads that take an item (`get()`, `getChildren()`, `isExpanded()`), the
20
+ * calls that expand, select, follow and edit items, and the streams `changed$` and
21
+ * `resynced$`. Reading it reads the outline. With no document the signals read empty, and every
22
+ * call refuses with `not-ready`.
23
+ */
24
+ class EpdfOutline extends pluginService({
25
+ name: 'EpdfOutline',
26
+ feature: 'withOutline()',
27
+ token: OutlineToken,
28
+ state: outlineState,
29
+ methods: [
30
+ 'get',
31
+ 'getChildren',
32
+ 'isExpanded',
33
+ 'getCurrentViewTarget',
34
+ 'ensureLoaded',
35
+ 'refresh',
36
+ 'expand',
37
+ 'collapse',
38
+ 'toggle',
39
+ 'expandAll',
40
+ 'collapseAll',
41
+ 'reveal',
42
+ 'select',
43
+ 'activate',
44
+ 'create',
45
+ 'update',
46
+ 'move',
47
+ 'delete',
48
+ ],
49
+ events: ['onChanged', 'onResynced'],
50
+ }) {
51
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: EpdfOutline, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
52
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: EpdfOutline, providedIn: 'root' });
53
+ }
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: EpdfOutline, decorators: [{
55
+ type: Injectable,
56
+ args: [{ providedIn: 'root' }]
57
+ }] });
58
+ /** The outline, for `provideEmbedPdf()`. */
59
+ function withOutline() {
60
+ return { plugins: [outlinePlugin()], services: [EpdfOutline] };
61
+ }
62
+
63
+ /**
64
+ * @embedpdf/angular/outline: the document's outline (its bookmarks).
65
+ *
66
+ * withOutline() the plugin, for provideEmbedPdf()
67
+ * inject(EpdfOutline) rows(), current(), canEdit(), activate(), create(), changed$, …
68
+ */
69
+ // The plugin's types and helpers, so app code has one import for the feature.
70
+
71
+ /**
72
+ * Generated bundle index. Do not edit.
73
+ */
74
+
75
+ export { EpdfOutline, withOutline };
76
+ //# sourceMappingURL=embedpdf-angular-outline.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedpdf-angular-outline.mjs","sources":["../../outline/src/outline.ts","../../outline/src/public_api.ts","../../outline/src/embedpdf-angular-outline.ts"],"sourcesContent":["/**\n * The outline plugin's service and feature: the document's outline (its bookmarks). Reading it\n * reads the outline; the plugin keeps it live off the document's event stream, and shows your\n * own edits at once:\n *\n * protected readonly outline = inject(EpdfOutline);\n * @for (row of outline.rows(); track row.item.ref.objectNumber) { … }\n * (click)=\"outline.activate(row.item.ref)\" goes where the item goes, as a click does\n */\nimport { Injectable } from '@angular/core';\nimport { pluginService, type EmbedPdfFeature } from '@embedpdf/angular/runtime';\nimport { outlinePlugin, outlineState, OutlineToken } from '@embedpdf/plugin-outline';\n\n/**\n * The outline of the document in scope (`[epdfDocumentScope]`), else the active one: the State\n * table as signals (`items()`, `rows()`, `current()`, `selected()`, `status()`, `incomplete()`,\n * `canEdit()`), the reads that take an item (`get()`, `getChildren()`, `isExpanded()`), the\n * calls that expand, select, follow and edit items, and the streams `changed$` and\n * `resynced$`. Reading it reads the outline. With no document the signals read empty, and every\n * call refuses with `not-ready`.\n */\n@Injectable({ providedIn: 'root' })\nexport class EpdfOutline extends pluginService({\n name: 'EpdfOutline',\n feature: 'withOutline()',\n token: OutlineToken,\n state: outlineState,\n methods: [\n 'get',\n 'getChildren',\n 'isExpanded',\n 'getCurrentViewTarget',\n 'ensureLoaded',\n 'refresh',\n 'expand',\n 'collapse',\n 'toggle',\n 'expandAll',\n 'collapseAll',\n 'reveal',\n 'select',\n 'activate',\n 'create',\n 'update',\n 'move',\n 'delete',\n ],\n events: ['onChanged', 'onResynced'],\n}) {}\n\n/** The outline, for `provideEmbedPdf()`. */\nexport function withOutline(): EmbedPdfFeature {\n return { plugins: [outlinePlugin()], services: [EpdfOutline] };\n}\n","/**\n * @embedpdf/angular/outline: the document's outline (its bookmarks).\n *\n * withOutline() the plugin, for provideEmbedPdf()\n * inject(EpdfOutline) rows(), current(), canEdit(), activate(), create(), changed$, …\n */\n\n// The plugin's types and helpers, so app code has one import for the feature.\nexport * from '@embedpdf/plugin-outline';\nexport * from './outline';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;AAAA;;;;;;;;AAQG;AAKH;;;;;;;AAOG;AAEG,MAAO,WAAY,SAAQ,aAAa,CAAC;AAC7C,IAAA,IAAI,EAAE,aAAa;AACnB,IAAA,OAAO,EAAE,eAAe;AACxB,IAAA,KAAK,EAAE,YAAY;AACnB,IAAA,KAAK,EAAE,YAAY;AACnB,IAAA,OAAO,EAAE;QACP,KAAK;QACL,aAAa;QACb,YAAY;QACZ,sBAAsB;QACtB,cAAc;QACd,SAAS;QACT,QAAQ;QACR,UAAU;QACV,QAAQ;QACR,WAAW;QACX,aAAa;QACb,QAAQ;QACR,QAAQ;QACR,UAAU;QACV,QAAQ;QACR,QAAQ;QACR,MAAM;QACN,QAAQ;AACT,KAAA;AACD,IAAA,MAAM,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC;CACpC,CAAC,CAAA;uGA1BW,WAAW,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAX,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cADE,MAAM,EAAA,CAAA;;2FACnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;AA6BlC;SACgB,WAAW,GAAA;AACzB,IAAA,OAAO,EAAE,OAAO,EAAE,CAAC,aAAa,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE;AAChE;;ACrDA;;;;;AAKG;AAEH;;ACPA;;AAEG;;;;"}
@@ -1,4 +1,4 @@
1
- import { PageEditToken, pageEditPlugin } from '@embedpdf/plugin-page-edit';
1
+ import { pageEditState, PageEditToken, pageEditPlugin } from '@embedpdf/plugin-page-edit';
2
2
  export * from '@embedpdf/plugin-page-edit';
3
3
  import * as i0 from '@angular/core';
4
4
  import { Injectable } from '@angular/core';
@@ -6,22 +6,25 @@ import { pluginService } from '@embedpdf/angular/runtime';
6
6
 
7
7
  /**
8
8
  * The page-edit plugin's service and feature. The plugin turns a page relative to its rotation
9
- * and resolves where pages go, so the service is the plugin's calls and nothing more:
9
+ * and resolves where pages go, so the service is the plugin's calls and its selection:
10
10
  *
11
11
  * await pageEdit.rotateBy([page.ref], 90);
12
12
  */
13
13
  /**
14
14
  * The page edits of the document in scope (`[epdfDocumentScope]`), else the active one. The
15
15
  * checks `canEdit()` and `canExtract()` follow the document when a template reads them; with no
16
- * document every call refuses with `not-ready`. The plugin has no state or events of its own:
17
- * page changes are document events (`inject(EpdfDocuments).pagesChanged$`), and the pages are
18
- * `inject(EpdfDocument).pages()`.
16
+ * document every call refuses with `not-ready`. `selected()` is the selection, a signal. The
17
+ * plugin has no events of its own: page changes are document events
18
+ * (`inject(EpdfDocuments).pagesChanged$`), and the pages are `inject(EpdfDocument).pages()`.
19
19
  */
20
20
  class EpdfPageEdit extends pluginService({
21
21
  name: 'EpdfPageEdit',
22
22
  feature: 'withPageEdit()',
23
23
  token: PageEditToken,
24
+ state: pageEditState,
25
+ // `canEdit` and `canExtract` stay calls: with no document they refuse `not-ready`.
24
26
  methods: [
27
+ 'select',
25
28
  'rotateBy',
26
29
  'setRotation',
27
30
  'reorder',
@@ -1 +1 @@
1
- {"version":3,"file":"embedpdf-angular-page-edit.mjs","sources":["../../page-edit/src/page-edit.ts","../../page-edit/src/public_api.ts","../../page-edit/src/embedpdf-angular-page-edit.ts"],"sourcesContent":["/**\n * The page-edit plugin's service and feature. The plugin turns a page relative to its rotation\n * and resolves where pages go, so the service is the plugin's calls and nothing more:\n *\n * await pageEdit.rotateBy([page.ref], 90);\n */\nimport { Injectable } from '@angular/core';\nimport { pluginService, type EmbedPdfFeature } from '@embedpdf/angular/runtime';\nimport { pageEditPlugin, PageEditToken } from '@embedpdf/plugin-page-edit';\n\n/**\n * The page edits of the document in scope (`[epdfDocumentScope]`), else the active one. The\n * checks `canEdit()` and `canExtract()` follow the document when a template reads them; with no\n * document every call refuses with `not-ready`. The plugin has no state or events of its own:\n * page changes are document events (`inject(EpdfDocuments).pagesChanged$`), and the pages are\n * `inject(EpdfDocument).pages()`.\n */\n@Injectable({ providedIn: 'root' })\nexport class EpdfPageEdit extends pluginService({\n name: 'EpdfPageEdit',\n feature: 'withPageEdit()',\n token: PageEditToken,\n methods: [\n 'rotateBy',\n 'setRotation',\n 'reorder',\n 'delete',\n 'insertBlank',\n 'insertFromBytes',\n 'insertFromDocument',\n 'duplicate',\n 'extract',\n 'canEdit',\n 'canExtract',\n ],\n}) {}\n\n/** Page editing, for `provideEmbedPdf()`. */\nexport function withPageEdit(): EmbedPdfFeature {\n return { plugins: [pageEditPlugin()], services: [EpdfPageEdit] };\n}\n","/**\n * @embedpdf/angular/page-edit: changing a document's pages.\n *\n * withPageEdit() the plugin, for provideEmbedPdf()\n * inject(EpdfPageEdit) rotateBy(), reorder(), delete(), insertBlank(), extract(), canEdit(), …\n *\n * The pages themselves are `inject(EpdfDocument).pages()`, which follows every change.\n */\n\n// The plugin's types and helpers, so app code has one import for the feature.\nexport * from '@embedpdf/plugin-page-edit';\nexport * from './page-edit';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;AAAA;;;;;AAKG;AAKH;;;;;;AAMG;AAEG,MAAO,YAAa,SAAQ,aAAa,CAAC;AAC9C,IAAA,IAAI,EAAE,cAAc;AACpB,IAAA,OAAO,EAAE,gBAAgB;AACzB,IAAA,KAAK,EAAE,aAAa;AACpB,IAAA,OAAO,EAAE;QACP,UAAU;QACV,aAAa;QACb,SAAS;QACT,QAAQ;QACR,aAAa;QACb,iBAAiB;QACjB,oBAAoB;QACpB,WAAW;QACX,SAAS;QACT,SAAS;QACT,YAAY;AACb,KAAA;CACF,CAAC,CAAA;uGAjBW,YAAY,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cADC,MAAM,EAAA,CAAA;;2FACnB,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;AAoBlC;SACgB,YAAY,GAAA;AAC1B,IAAA,OAAO,EAAE,OAAO,EAAE,CAAC,cAAc,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;AAClE;;ACxCA;;;;;;;AAOG;AAEH;;ACTA;;AAEG;;;;"}
1
+ {"version":3,"file":"embedpdf-angular-page-edit.mjs","sources":["../../page-edit/src/page-edit.ts","../../page-edit/src/public_api.ts","../../page-edit/src/embedpdf-angular-page-edit.ts"],"sourcesContent":["/**\n * The page-edit plugin's service and feature. The plugin turns a page relative to its rotation\n * and resolves where pages go, so the service is the plugin's calls and its selection:\n *\n * await pageEdit.rotateBy([page.ref], 90);\n */\nimport { Injectable } from '@angular/core';\nimport { pluginService, type EmbedPdfFeature } from '@embedpdf/angular/runtime';\nimport { pageEditPlugin, pageEditState, PageEditToken } from '@embedpdf/plugin-page-edit';\n\n/**\n * The page edits of the document in scope (`[epdfDocumentScope]`), else the active one. The\n * checks `canEdit()` and `canExtract()` follow the document when a template reads them; with no\n * document every call refuses with `not-ready`. `selected()` is the selection, a signal. The\n * plugin has no events of its own: page changes are document events\n * (`inject(EpdfDocuments).pagesChanged$`), and the pages are `inject(EpdfDocument).pages()`.\n */\n@Injectable({ providedIn: 'root' })\nexport class EpdfPageEdit extends pluginService({\n name: 'EpdfPageEdit',\n feature: 'withPageEdit()',\n token: PageEditToken,\n state: pageEditState,\n // `canEdit` and `canExtract` stay calls: with no document they refuse `not-ready`.\n methods: [\n 'select',\n 'rotateBy',\n 'setRotation',\n 'reorder',\n 'delete',\n 'insertBlank',\n 'insertFromBytes',\n 'insertFromDocument',\n 'duplicate',\n 'extract',\n 'canEdit',\n 'canExtract',\n ],\n}) {}\n\n/** Page editing, for `provideEmbedPdf()`. */\nexport function withPageEdit(): EmbedPdfFeature {\n return { plugins: [pageEditPlugin()], services: [EpdfPageEdit] };\n}\n","/**\n * @embedpdf/angular/page-edit: changing a document's pages.\n *\n * withPageEdit() the plugin, for provideEmbedPdf()\n * inject(EpdfPageEdit) rotateBy(), reorder(), delete(), insertBlank(), extract(), canEdit(), …\n *\n * The pages themselves are `inject(EpdfDocument).pages()`, which follows every change.\n */\n\n// The plugin's types and helpers, so app code has one import for the feature.\nexport * from '@embedpdf/plugin-page-edit';\nexport * from './page-edit';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;AAAA;;;;;AAKG;AAKH;;;;;;AAMG;AAEG,MAAO,YAAa,SAAQ,aAAa,CAAC;AAC9C,IAAA,IAAI,EAAE,cAAc;AACpB,IAAA,OAAO,EAAE,gBAAgB;AACzB,IAAA,KAAK,EAAE,aAAa;AACpB,IAAA,KAAK,EAAE,aAAa;;AAEpB,IAAA,OAAO,EAAE;QACP,QAAQ;QACR,UAAU;QACV,aAAa;QACb,SAAS;QACT,QAAQ;QACR,aAAa;QACb,iBAAiB;QACjB,oBAAoB;QACpB,WAAW;QACX,SAAS;QACT,SAAS;QACT,YAAY;AACb,KAAA;CACF,CAAC,CAAA;uGApBW,YAAY,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cADC,MAAM,EAAA,CAAA;;2FACnB,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;AAuBlC;SACgB,YAAY,GAAA;AAC1B,IAAA,OAAO,EAAE,OAAO,EAAE,CAAC,cAAc,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;AAClE;;AC3CA;;;;;;;AAOG;AAEH;;ACTA;;AAEG;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { mergeSettings, viewerSettingsOf, VIEWER_WHOLE_SETTINGS, VIEWER_DEFAULTS, shallowEqual, DocumentsToken, PluginError, isLocalEngine, createKernel, isPluginError, returnsPromise, isReadMember, documentsState, documentState } from '@embedpdf/core';
2
2
  export * from '@embedpdf/core';
3
- import { browserClock, pageClientSpace, pageLayersOf, createFontMounts, epdfThemeVariables } from '@embedpdf/web';
3
+ import { browserPrinter, browserClock, pageClientSpace, pageLayersOf, createFontMounts, epdfThemeVariables } from '@embedpdf/web';
4
4
  export { mountWebFont, saveFile } from '@embedpdf/web';
5
5
  import * as i0 from '@angular/core';
6
6
  import { InjectionToken, signal, computed, inject, Injector, PLATFORM_ID, DestroyRef, untracked, runInInjectionContext, Injectable, effect, input, forwardRef, Directive, TemplateRef, ViewContainerRef, ChangeDetectorRef, afterNextRender, ElementRef, ChangeDetectionStrategy, Component, isDevMode } from '@angular/core';
@@ -353,6 +353,7 @@ class EpdfKernelHost {
353
353
  plugins: [...this.plugins],
354
354
  settings: registeredViewerSettings(config),
355
355
  clock: browserClock(),
356
+ printer: browserPrinter(),
356
357
  });
357
358
  }
358
359
  catch (error) {
@@ -765,6 +766,9 @@ class EpdfDocuments extends pluginService({
765
766
  'swap',
766
767
  'download',
767
768
  'downloadLayer',
769
+ 'preparePrint',
770
+ 'print',
771
+ 'getPrintQuality',
768
772
  'canDownload',
769
773
  'canPrint',
770
774
  'listPages',