@shznet/pdf-sign-angular 0.1.0
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/README.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# @shznet/pdf-sign-angular
|
|
2
|
+
|
|
3
|
+
Angular component wrapper for `@shznet/pdf-sign-control`.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @shznet/pdf-sign-angular @shznet/pdf-sign-control pdfjs-dist
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
Import the module in your `app.module.ts`:
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import { PdfSignAngularModule } from '@shznet/pdf-sign-angular';
|
|
17
|
+
|
|
18
|
+
@NgModule({
|
|
19
|
+
imports: [PdfSignAngularModule],
|
|
20
|
+
// ...
|
|
21
|
+
})
|
|
22
|
+
export class AppModule {}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Use the component in your template:
|
|
26
|
+
|
|
27
|
+
```html
|
|
28
|
+
<lib-pdf-sign-angular
|
|
29
|
+
[url]="'https://example.com/doc.pdf'"
|
|
30
|
+
[scale]="1.0"
|
|
31
|
+
(pdfLoaded)="onPdfLoaded()"
|
|
32
|
+
>
|
|
33
|
+
</lib-pdf-sign-angular>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Inputs & Outputs
|
|
37
|
+
|
|
38
|
+
- **[url]**: `string` - Path to the PDF file.
|
|
39
|
+
- **[scale]**: `number` - Zoom level.
|
|
40
|
+
- **(pdfLoaded)**: `EventEmitter<void>` - Emitted when PDF renders successfully.
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { EventEmitter, Output, Input, ViewChild, Component } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { PdfSignControl } from '@shznet/pdf-sign-control';
|
|
5
|
+
|
|
6
|
+
class PdfSignAngularComponent {
|
|
7
|
+
container;
|
|
8
|
+
/** PDF source URL or ArrayBuffer - auto-loads when provided */
|
|
9
|
+
src;
|
|
10
|
+
/** Initial view mode: 'scroll' or 'single' */
|
|
11
|
+
viewMode;
|
|
12
|
+
/** Initial fields */
|
|
13
|
+
fields;
|
|
14
|
+
/** PDF.js loader options */
|
|
15
|
+
pdfLoaderOptions;
|
|
16
|
+
/** Emitted when control is ready */
|
|
17
|
+
ready = new EventEmitter();
|
|
18
|
+
/** Emitted when PDF is loaded */
|
|
19
|
+
loaded = new EventEmitter();
|
|
20
|
+
/** Emitted when page changes */
|
|
21
|
+
pageChange = new EventEmitter();
|
|
22
|
+
/** Emitted when scale changes */
|
|
23
|
+
scaleChange = new EventEmitter();
|
|
24
|
+
/** Emitted on error */
|
|
25
|
+
error = new EventEmitter();
|
|
26
|
+
/** Emitted when a field is added */
|
|
27
|
+
fieldAdd = new EventEmitter();
|
|
28
|
+
/** Emitted when a field is removed */
|
|
29
|
+
fieldRemove = new EventEmitter();
|
|
30
|
+
/** Emitted when a field is updated */
|
|
31
|
+
fieldUpdate = new EventEmitter();
|
|
32
|
+
/** Emitted when any field changes (add/remove/update) */
|
|
33
|
+
fieldsChange = new EventEmitter();
|
|
34
|
+
control = null;
|
|
35
|
+
ngOnInit() {
|
|
36
|
+
if (this.container) {
|
|
37
|
+
this.control = new PdfSignControl({
|
|
38
|
+
container: this.container.nativeElement,
|
|
39
|
+
viewMode: this.viewMode,
|
|
40
|
+
pdfLoaderOptions: this.pdfLoaderOptions,
|
|
41
|
+
fields: this.fields
|
|
42
|
+
});
|
|
43
|
+
// Setup event listeners
|
|
44
|
+
this.control.on('page:change', (data) => {
|
|
45
|
+
this.pageChange.emit(data);
|
|
46
|
+
});
|
|
47
|
+
this.control.on('scale:change', (data) => {
|
|
48
|
+
this.scaleChange.emit(data);
|
|
49
|
+
});
|
|
50
|
+
// Field Events
|
|
51
|
+
this.control.on('field:add', (field) => {
|
|
52
|
+
this.fieldAdd.emit(field);
|
|
53
|
+
});
|
|
54
|
+
this.control.on('field:remove', (data) => {
|
|
55
|
+
this.fieldRemove.emit(data);
|
|
56
|
+
});
|
|
57
|
+
this.control.on('field:update', (data) => {
|
|
58
|
+
this.fieldUpdate.emit(data);
|
|
59
|
+
});
|
|
60
|
+
this.control.on('fields:change', (fields) => {
|
|
61
|
+
this.fieldsChange.emit(fields);
|
|
62
|
+
});
|
|
63
|
+
this.ready.emit(this.control);
|
|
64
|
+
// Auto-load if src provided
|
|
65
|
+
if (this.src) {
|
|
66
|
+
this.loadPdf(this.src);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
ngOnChanges(changes) {
|
|
71
|
+
if (changes['src'] && !changes['src'].firstChange && this.src) {
|
|
72
|
+
this.loadPdf(this.src);
|
|
73
|
+
}
|
|
74
|
+
if (changes['viewMode'] && !changes['viewMode'].firstChange && this.viewMode) {
|
|
75
|
+
this.control?.setViewMode(this.viewMode);
|
|
76
|
+
}
|
|
77
|
+
if (changes['fields'] && !changes['fields'].firstChange && this.fields) {
|
|
78
|
+
const currentFields = this.control?.getFields();
|
|
79
|
+
if (JSON.stringify(currentFields) === JSON.stringify(this.fields)) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
this.control?.setFields(this.fields);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
ngOnDestroy() {
|
|
86
|
+
if (this.control) {
|
|
87
|
+
this.control.destroy();
|
|
88
|
+
this.control = null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
loadPdf(source) {
|
|
92
|
+
this.control?.load(source)
|
|
93
|
+
.then(() => this.loaded.emit())
|
|
94
|
+
.catch((err) => this.error.emit(err));
|
|
95
|
+
}
|
|
96
|
+
// Public API methods
|
|
97
|
+
/** Get the underlying PdfSignControl instance */
|
|
98
|
+
getControl() {
|
|
99
|
+
return this.control;
|
|
100
|
+
}
|
|
101
|
+
/** Load a PDF from URL or ArrayBuffer */
|
|
102
|
+
load(source) {
|
|
103
|
+
return this.control?.load(source) ?? Promise.reject('Control not initialized');
|
|
104
|
+
}
|
|
105
|
+
/** Navigate to specific page */
|
|
106
|
+
goToPage(page) {
|
|
107
|
+
this.control?.goToPage(page);
|
|
108
|
+
}
|
|
109
|
+
/** Go to next page */
|
|
110
|
+
nextPage() {
|
|
111
|
+
this.control?.nextPage();
|
|
112
|
+
}
|
|
113
|
+
/** Go to previous page */
|
|
114
|
+
previousPage() {
|
|
115
|
+
this.control?.previousPage();
|
|
116
|
+
}
|
|
117
|
+
/** Get current page number */
|
|
118
|
+
getCurrentPage() {
|
|
119
|
+
return this.control?.getCurrentPage() ?? 1;
|
|
120
|
+
}
|
|
121
|
+
/** Get total pages */
|
|
122
|
+
getTotalPages() {
|
|
123
|
+
return this.control?.getTotalPages() ?? 0;
|
|
124
|
+
}
|
|
125
|
+
/** Set zoom scale */
|
|
126
|
+
setScale(scale) {
|
|
127
|
+
this.control?.setScale(scale);
|
|
128
|
+
}
|
|
129
|
+
/** Get current zoom scale */
|
|
130
|
+
getScale() {
|
|
131
|
+
return this.control?.getScale() ?? 1.0;
|
|
132
|
+
}
|
|
133
|
+
/** Set view mode */
|
|
134
|
+
setViewMode(mode) {
|
|
135
|
+
return this.control?.setViewMode(mode) ?? Promise.resolve();
|
|
136
|
+
}
|
|
137
|
+
/** Get current view mode */
|
|
138
|
+
getViewMode() {
|
|
139
|
+
return this.control?.getViewMode() ?? 'scroll';
|
|
140
|
+
}
|
|
141
|
+
// Field Management Wrappers
|
|
142
|
+
addField(field) {
|
|
143
|
+
this.control?.addField(field);
|
|
144
|
+
}
|
|
145
|
+
removeField(fieldId) {
|
|
146
|
+
this.control?.removeField(fieldId);
|
|
147
|
+
}
|
|
148
|
+
updateField(fieldId, updates) {
|
|
149
|
+
this.control?.updateField(fieldId, updates);
|
|
150
|
+
}
|
|
151
|
+
setFields(fields) {
|
|
152
|
+
this.control?.setFields(fields);
|
|
153
|
+
}
|
|
154
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: PdfSignAngularComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
155
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: PdfSignAngularComponent, isStandalone: true, selector: "lib-pdf-sign-angular", inputs: { src: "src", viewMode: "viewMode", fields: "fields", pdfLoaderOptions: "pdfLoaderOptions" }, outputs: { ready: "ready", loaded: "loaded", pageChange: "pageChange", scaleChange: "scaleChange", error: "error", fieldAdd: "fieldAdd", fieldRemove: "fieldRemove", fieldUpdate: "fieldUpdate", fieldsChange: "fieldsChange" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div #container class=\"pdf-sign-angular-container\"></div>\n", styles: [":host{display:block;width:100%;height:100%}.pdf-sign-angular-container{width:100%;height:100%;position:relative}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
156
|
+
}
|
|
157
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: PdfSignAngularComponent, decorators: [{
|
|
158
|
+
type: Component,
|
|
159
|
+
args: [{ selector: 'lib-pdf-sign-angular', standalone: true, imports: [CommonModule], template: "<div #container class=\"pdf-sign-angular-container\"></div>\n", styles: [":host{display:block;width:100%;height:100%}.pdf-sign-angular-container{width:100%;height:100%;position:relative}\n"] }]
|
|
160
|
+
}], propDecorators: { container: [{
|
|
161
|
+
type: ViewChild,
|
|
162
|
+
args: ['container', { static: true }]
|
|
163
|
+
}], src: [{
|
|
164
|
+
type: Input
|
|
165
|
+
}], viewMode: [{
|
|
166
|
+
type: Input
|
|
167
|
+
}], fields: [{
|
|
168
|
+
type: Input
|
|
169
|
+
}], pdfLoaderOptions: [{
|
|
170
|
+
type: Input
|
|
171
|
+
}], ready: [{
|
|
172
|
+
type: Output
|
|
173
|
+
}], loaded: [{
|
|
174
|
+
type: Output
|
|
175
|
+
}], pageChange: [{
|
|
176
|
+
type: Output
|
|
177
|
+
}], scaleChange: [{
|
|
178
|
+
type: Output
|
|
179
|
+
}], error: [{
|
|
180
|
+
type: Output
|
|
181
|
+
}], fieldAdd: [{
|
|
182
|
+
type: Output
|
|
183
|
+
}], fieldRemove: [{
|
|
184
|
+
type: Output
|
|
185
|
+
}], fieldUpdate: [{
|
|
186
|
+
type: Output
|
|
187
|
+
}], fieldsChange: [{
|
|
188
|
+
type: Output
|
|
189
|
+
}] } });
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Generated bundle index. Do not edit.
|
|
193
|
+
*/
|
|
194
|
+
|
|
195
|
+
export { PdfSignAngularComponent };
|
|
196
|
+
//# sourceMappingURL=shznet-pdf-sign-angular.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shznet-pdf-sign-angular.mjs","sources":["../../../../packages/pdf-sign-angular/src/lib/pdf-sign-angular/pdf-sign-angular.ts","../../../../packages/pdf-sign-angular/src/lib/pdf-sign-angular/pdf-sign-angular.html","../../../../packages/pdf-sign-angular/src/shznet-pdf-sign-angular.ts"],"sourcesContent":["\nimport { Component, ElementRef, ViewChild, OnInit, OnDestroy, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PdfSignControl, PdfSignControlOptions, ViewMode, SignatureField } from '@shznet/pdf-sign-control';\n\n@Component({\n selector: 'lib-pdf-sign-angular',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './pdf-sign-angular.html',\n styleUrl: './pdf-sign-angular.css',\n})\nexport class PdfSignAngularComponent implements OnInit, OnDestroy, OnChanges {\n @ViewChild('container', { static: true }) container!: ElementRef<HTMLDivElement>;\n\n /** PDF source URL or ArrayBuffer - auto-loads when provided */\n @Input() src?: string | Uint8Array | ArrayBuffer;\n\n /** Initial view mode: 'scroll' or 'single' */\n @Input() viewMode?: ViewMode;\n\n /** Initial fields */\n @Input() fields?: SignatureField[];\n\n /** PDF.js loader options */\n @Input() pdfLoaderOptions?: PdfSignControlOptions['pdfLoaderOptions'];\n\n /** Emitted when control is ready */\n @Output() ready = new EventEmitter<PdfSignControl>();\n\n /** Emitted when PDF is loaded */\n @Output() loaded = new EventEmitter<void>();\n\n /** Emitted when page changes */\n @Output() pageChange = new EventEmitter<{ page: number; total: number }>();\n\n /** Emitted when scale changes */\n @Output() scaleChange = new EventEmitter<{ scale: number }>();\n\n /** Emitted on error */\n @Output() error = new EventEmitter<Error>();\n\n /** Emitted when a field is added */\n @Output() fieldAdd = new EventEmitter<SignatureField>();\n\n /** Emitted when a field is removed */\n @Output() fieldRemove = new EventEmitter<{ fieldId: string }>();\n\n /** Emitted when a field is updated */\n @Output() fieldUpdate = new EventEmitter<{ fieldId: string, updates: Partial<SignatureField> }>();\n\n /** Emitted when any field changes (add/remove/update) */\n @Output() fieldsChange = new EventEmitter<SignatureField[]>();\n\n private control: PdfSignControl | null = null;\n\n ngOnInit() {\n if (this.container) {\n this.control = new PdfSignControl({\n container: this.container.nativeElement,\n viewMode: this.viewMode,\n pdfLoaderOptions: this.pdfLoaderOptions,\n fields: this.fields\n });\n\n // Setup event listeners\n this.control.on('page:change', (data: { page: number; total: number }) => {\n this.pageChange.emit(data);\n });\n\n this.control.on('scale:change', (data: { scale: number }) => {\n this.scaleChange.emit(data);\n });\n\n // Field Events\n this.control.on('field:add', (field: SignatureField) => {\n this.fieldAdd.emit(field);\n });\n this.control.on('field:remove', (data: { fieldId: string }) => {\n this.fieldRemove.emit(data);\n });\n this.control.on('field:update', (data: { fieldId: string, updates: Partial<SignatureField> }) => {\n this.fieldUpdate.emit(data);\n });\n this.control.on('fields:change', (fields: SignatureField[]) => {\n this.fieldsChange.emit(fields);\n });\n\n this.ready.emit(this.control);\n\n // Auto-load if src provided\n if (this.src) {\n this.loadPdf(this.src);\n }\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['src'] && !changes['src'].firstChange && this.src) {\n this.loadPdf(this.src);\n }\n if (changes['viewMode'] && !changes['viewMode'].firstChange && this.viewMode) {\n this.control?.setViewMode(this.viewMode);\n }\n if (changes['fields'] && !changes['fields'].firstChange && this.fields) {\n const currentFields = this.control?.getFields();\n if (JSON.stringify(currentFields) === JSON.stringify(this.fields)) {\n return;\n }\n this.control?.setFields(this.fields);\n }\n }\n\n ngOnDestroy() {\n if (this.control) {\n this.control.destroy();\n this.control = null;\n }\n }\n\n private loadPdf(source: string | Uint8Array | ArrayBuffer) {\n this.control?.load(source)\n .then(() => this.loaded.emit())\n .catch((err) => this.error.emit(err));\n }\n\n // Public API methods\n\n /** Get the underlying PdfSignControl instance */\n getControl(): PdfSignControl | null {\n return this.control;\n }\n\n /** Load a PDF from URL or ArrayBuffer */\n load(source: string | Uint8Array | ArrayBuffer): Promise<void> {\n return this.control?.load(source) ?? Promise.reject('Control not initialized');\n }\n\n /** Navigate to specific page */\n goToPage(page: number): void {\n this.control?.goToPage(page);\n }\n\n /** Go to next page */\n nextPage(): void {\n this.control?.nextPage();\n }\n\n /** Go to previous page */\n previousPage(): void {\n this.control?.previousPage();\n }\n\n /** Get current page number */\n getCurrentPage(): number {\n return this.control?.getCurrentPage() ?? 1;\n }\n\n /** Get total pages */\n getTotalPages(): number {\n return this.control?.getTotalPages() ?? 0;\n }\n\n /** Set zoom scale */\n setScale(scale: number): void {\n this.control?.setScale(scale);\n }\n\n /** Get current zoom scale */\n getScale(): number {\n return this.control?.getScale() ?? 1.0;\n }\n\n /** Set view mode */\n setViewMode(mode: ViewMode): Promise<void> {\n return this.control?.setViewMode(mode) ?? Promise.resolve();\n }\n\n /** Get current view mode */\n getViewMode(): ViewMode {\n return this.control?.getViewMode() ?? 'scroll';\n }\n\n // Field Management Wrappers\n\n addField(field: any): void {\n this.control?.addField(field);\n }\n\n removeField(fieldId: string): void {\n this.control?.removeField(fieldId);\n }\n\n updateField(fieldId: string, updates: any): void {\n this.control?.updateField(fieldId, updates);\n }\n\n setFields(fields: any[]): void {\n this.control?.setFields(fields);\n }\n}\n","<div #container class=\"pdf-sign-angular-container\"></div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;MAYa,uBAAuB,CAAA;AACQ,IAAA,SAAS;;AAG1C,IAAA,GAAG;;AAGH,IAAA,QAAQ;;AAGR,IAAA,MAAM;;AAGN,IAAA,gBAAgB;;AAGf,IAAA,KAAK,GAAG,IAAI,YAAY,EAAkB;;AAG1C,IAAA,MAAM,GAAG,IAAI,YAAY,EAAQ;;AAGjC,IAAA,UAAU,GAAG,IAAI,YAAY,EAAmC;;AAGhE,IAAA,WAAW,GAAG,IAAI,YAAY,EAAqB;;AAGnD,IAAA,KAAK,GAAG,IAAI,YAAY,EAAS;;AAGjC,IAAA,QAAQ,GAAG,IAAI,YAAY,EAAkB;;AAG7C,IAAA,WAAW,GAAG,IAAI,YAAY,EAAuB;;AAGrD,IAAA,WAAW,GAAG,IAAI,YAAY,EAAyD;;AAGvF,IAAA,YAAY,GAAG,IAAI,YAAY,EAAoB;IAErD,OAAO,GAA0B,IAAI;IAE7C,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC;AAChC,gBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa;gBACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;gBACvC,MAAM,EAAE,IAAI,CAAC;AACd,aAAA,CAAC;;YAGF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,IAAqC,KAAI;AACvE,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,YAAA,CAAC,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,IAAuB,KAAI;AAC1D,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7B,YAAA,CAAC,CAAC;;YAGF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,KAAqB,KAAI;AACrD,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,IAAyB,KAAI;AAC5D,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7B,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,IAA2D,KAAI;AAC9F,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7B,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,MAAwB,KAAI;AAC5D,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;AAChC,YAAA,CAAC,CAAC;YAEF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;AAG7B,YAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YACxB;QACF;IACF;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE;AAC7D,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QACxB;AACA,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC5E,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC1C;AACA,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,EAAE;YACtE,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE;AAC/C,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBACjE;YACF;YACA,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;QACtC;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACtB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACrB;IACF;AAEQ,IAAA,OAAO,CAAC,MAAyC,EAAA;AACvD,QAAA,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM;aACtB,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAC7B,aAAA,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC;;;IAKA,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;IACrB;;AAGA,IAAA,IAAI,CAAC,MAAyC,EAAA;AAC5C,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,yBAAyB,CAAC;IAChF;;AAGA,IAAA,QAAQ,CAAC,IAAY,EAAA;AACnB,QAAA,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC;IAC9B;;IAGA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE;IAC1B;;IAGA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE;IAC9B;;IAGA,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC;IAC5C;;IAGA,aAAa,GAAA;QACX,OAAO,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC;IAC3C;;AAGA,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC;IAC/B;;IAGA,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,GAAG;IACxC;;AAGA,IAAA,WAAW,CAAC,IAAc,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE;IAC7D;;IAGA,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,QAAQ;IAChD;;AAIA,IAAA,QAAQ,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC;IAC/B;AAEA,IAAA,WAAW,CAAC,OAAe,EAAA;AACzB,QAAA,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC;IACpC;IAEA,WAAW,CAAC,OAAe,EAAE,OAAY,EAAA;QACvC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC;IAC7C;AAEA,IAAA,SAAS,CAAC,MAAa,EAAA;AACrB,QAAA,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC;IACjC;uGA3LW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,KAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZpC,+DACA,EAAA,MAAA,EAAA,CAAA,oHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDOY,YAAY,EAAA,CAAA,EAAA,CAAA;;2FAIX,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAPnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,UAAA,EACpB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,+DAAA,EAAA,MAAA,EAAA,CAAA,oHAAA,CAAA,EAAA;;sBAKtB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAGvC;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;;AEpDH;;AAEG;;;;"}
|
package/package.json
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@shznet/pdf-sign-angular",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"peerDependencies": {
|
|
5
|
+
"@angular/common": "^21.0.0",
|
|
6
|
+
"@angular/core": "^21.0.0",
|
|
7
|
+
"@shznet/pdf-sign-control": "*"
|
|
8
|
+
},
|
|
9
|
+
"publishConfig": {
|
|
10
|
+
"access": "public"
|
|
11
|
+
},
|
|
12
|
+
"sideEffects": false,
|
|
13
|
+
"module": "fesm2022/shznet-pdf-sign-angular.mjs",
|
|
14
|
+
"typings": "types/shznet-pdf-sign-angular.d.ts",
|
|
15
|
+
"exports": {
|
|
16
|
+
"./package.json": {
|
|
17
|
+
"default": "./package.json"
|
|
18
|
+
},
|
|
19
|
+
".": {
|
|
20
|
+
"types": "./types/shznet-pdf-sign-angular.d.ts",
|
|
21
|
+
"default": "./fesm2022/shznet-pdf-sign-angular.mjs"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"tslib": "^2.3.0"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { OnInit, OnDestroy, OnChanges, ElementRef, EventEmitter, SimpleChanges } from '@angular/core';
|
|
3
|
+
import { ViewMode, SignatureField, PdfSignControlOptions, PdfSignControl } from '@shznet/pdf-sign-control';
|
|
4
|
+
|
|
5
|
+
declare class PdfSignAngularComponent implements OnInit, OnDestroy, OnChanges {
|
|
6
|
+
container: ElementRef<HTMLDivElement>;
|
|
7
|
+
/** PDF source URL or ArrayBuffer - auto-loads when provided */
|
|
8
|
+
src?: string | Uint8Array | ArrayBuffer;
|
|
9
|
+
/** Initial view mode: 'scroll' or 'single' */
|
|
10
|
+
viewMode?: ViewMode;
|
|
11
|
+
/** Initial fields */
|
|
12
|
+
fields?: SignatureField[];
|
|
13
|
+
/** PDF.js loader options */
|
|
14
|
+
pdfLoaderOptions?: PdfSignControlOptions['pdfLoaderOptions'];
|
|
15
|
+
/** Emitted when control is ready */
|
|
16
|
+
ready: EventEmitter<PdfSignControl>;
|
|
17
|
+
/** Emitted when PDF is loaded */
|
|
18
|
+
loaded: EventEmitter<void>;
|
|
19
|
+
/** Emitted when page changes */
|
|
20
|
+
pageChange: EventEmitter<{
|
|
21
|
+
page: number;
|
|
22
|
+
total: number;
|
|
23
|
+
}>;
|
|
24
|
+
/** Emitted when scale changes */
|
|
25
|
+
scaleChange: EventEmitter<{
|
|
26
|
+
scale: number;
|
|
27
|
+
}>;
|
|
28
|
+
/** Emitted on error */
|
|
29
|
+
error: EventEmitter<Error>;
|
|
30
|
+
/** Emitted when a field is added */
|
|
31
|
+
fieldAdd: EventEmitter<SignatureField>;
|
|
32
|
+
/** Emitted when a field is removed */
|
|
33
|
+
fieldRemove: EventEmitter<{
|
|
34
|
+
fieldId: string;
|
|
35
|
+
}>;
|
|
36
|
+
/** Emitted when a field is updated */
|
|
37
|
+
fieldUpdate: EventEmitter<{
|
|
38
|
+
fieldId: string;
|
|
39
|
+
updates: Partial<SignatureField>;
|
|
40
|
+
}>;
|
|
41
|
+
/** Emitted when any field changes (add/remove/update) */
|
|
42
|
+
fieldsChange: EventEmitter<SignatureField[]>;
|
|
43
|
+
private control;
|
|
44
|
+
ngOnInit(): void;
|
|
45
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
46
|
+
ngOnDestroy(): void;
|
|
47
|
+
private loadPdf;
|
|
48
|
+
/** Get the underlying PdfSignControl instance */
|
|
49
|
+
getControl(): PdfSignControl | null;
|
|
50
|
+
/** Load a PDF from URL or ArrayBuffer */
|
|
51
|
+
load(source: string | Uint8Array | ArrayBuffer): Promise<void>;
|
|
52
|
+
/** Navigate to specific page */
|
|
53
|
+
goToPage(page: number): void;
|
|
54
|
+
/** Go to next page */
|
|
55
|
+
nextPage(): void;
|
|
56
|
+
/** Go to previous page */
|
|
57
|
+
previousPage(): void;
|
|
58
|
+
/** Get current page number */
|
|
59
|
+
getCurrentPage(): number;
|
|
60
|
+
/** Get total pages */
|
|
61
|
+
getTotalPages(): number;
|
|
62
|
+
/** Set zoom scale */
|
|
63
|
+
setScale(scale: number): void;
|
|
64
|
+
/** Get current zoom scale */
|
|
65
|
+
getScale(): number;
|
|
66
|
+
/** Set view mode */
|
|
67
|
+
setViewMode(mode: ViewMode): Promise<void>;
|
|
68
|
+
/** Get current view mode */
|
|
69
|
+
getViewMode(): ViewMode;
|
|
70
|
+
addField(field: any): void;
|
|
71
|
+
removeField(fieldId: string): void;
|
|
72
|
+
updateField(fieldId: string, updates: any): void;
|
|
73
|
+
setFields(fields: any[]): void;
|
|
74
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PdfSignAngularComponent, never>;
|
|
75
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PdfSignAngularComponent, "lib-pdf-sign-angular", never, { "src": { "alias": "src"; "required": false; }; "viewMode": { "alias": "viewMode"; "required": false; }; "fields": { "alias": "fields"; "required": false; }; "pdfLoaderOptions": { "alias": "pdfLoaderOptions"; "required": false; }; }, { "ready": "ready"; "loaded": "loaded"; "pageChange": "pageChange"; "scaleChange": "scaleChange"; "error": "error"; "fieldAdd": "fieldAdd"; "fieldRemove": "fieldRemove"; "fieldUpdate": "fieldUpdate"; "fieldsChange": "fieldsChange"; }, never, never, true, never>;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export { PdfSignAngularComponent };
|