@shznet/pdf-sign-angular 0.1.0 → 0.2.1

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 CHANGED
@@ -5,36 +5,50 @@ Angular component wrapper for `@shznet/pdf-sign-control`.
5
5
  ## Installation
6
6
 
7
7
  ```bash
8
- npm install @shznet/pdf-sign-angular @shznet/pdf-sign-control pdfjs-dist
8
+ npm install @shznet/pdf-sign-angular
9
9
  ```
10
10
 
11
11
  ## Usage
12
12
 
13
- Import the module in your `app.module.ts`:
13
+ Import the component (Standalone) or Module:
14
14
 
15
15
  ```typescript
16
- import { PdfSignAngularModule } from '@shznet/pdf-sign-angular';
16
+ import { PdfSignAngularComponent } from '@shznet/pdf-sign-angular';
17
17
 
18
- @NgModule({
19
- imports: [PdfSignAngularModule],
20
- // ...
18
+ @Component({
19
+ ...
20
+ imports: [PdfSignAngularComponent],
21
+ ...
21
22
  })
22
- export class AppModule {}
23
+ export class AppComponent {}
23
24
  ```
24
25
 
25
26
  Use the component in your template:
26
27
 
27
28
  ```html
28
29
  <lib-pdf-sign-angular
29
- [url]="'https://example.com/doc.pdf'"
30
- [scale]="1.0"
31
- (pdfLoaded)="onPdfLoaded()"
30
+ [src]="'https://example.com/doc.pdf'"
31
+ [viewMode]="'scroll'"
32
+ (loaded)="onPdfLoaded()"
32
33
  >
33
34
  </lib-pdf-sign-angular>
34
35
  ```
35
36
 
37
+ ```typescript
38
+ // Component Code
39
+ @ViewChild(PdfSignAngularComponent) pdfSign!: PdfSignAngularComponent;
40
+
41
+ print() {
42
+ this.pdfSign.print({ withSignatures: true });
43
+ }
44
+ ```
45
+
36
46
  ## Inputs & Outputs
37
47
 
38
- - **[url]**: `string` - Path to the PDF file.
39
- - **[scale]**: `number` - Zoom level.
40
- - **(pdfLoaded)**: `EventEmitter<void>` - Emitted when PDF renders successfully.
48
+ - **[src]**: `string | Uint8Array | ArrayBuffer` - Source of the PDF file.
49
+ - **[viewMode]**: `'single' | 'scroll'` - View mode configuration.
50
+ - **[fields]**: `SignatureField[]` - Initial fields.
51
+ - **(loaded)**: `EventEmitter<void>` - Emitted when PDF renders successfully.
52
+ - **(pageChange)**: `EventEmitter<{ page: number, total: number }>` - Emitted on navigation.
53
+ - **(scaleChange)**: `EventEmitter<{ scale: number }>` - Emitted on zoom.
54
+ - **(fieldsChange)**: `EventEmitter<SignatureField[]>` - Emitted when fields change.
@@ -138,6 +138,10 @@ class PdfSignAngularComponent {
138
138
  getViewMode() {
139
139
  return this.control?.getViewMode() ?? 'scroll';
140
140
  }
141
+ /** Print the PDF */
142
+ print(options) {
143
+ return this.control?.print(options) ?? Promise.resolve();
144
+ }
141
145
  // Field Management Wrappers
142
146
  addField(field) {
143
147
  this.control?.addField(field);
@@ -1 +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":"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"}
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 /** Print the PDF */\n print(options?: { withSignatures?: boolean }): Promise<void> {\n return this.control?.print(options) ?? Promise.resolve();\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":"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"}
package/package.json CHANGED
@@ -1,10 +1,24 @@
1
1
  {
2
2
  "name": "@shznet/pdf-sign-angular",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
+ "description": "Angular wrapper for @shznet/pdf-sign-control",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/ShzNet/pdf-signature-control.git"
9
+ },
10
+ "author": "Chien Tran <chientranit@gmail.com>",
11
+ "bugs": {
12
+ "url": "https://github.com/ShzNet/pdf-signature-control/issues"
13
+ },
14
+ "homepage": "https://github.com/ShzNet/pdf-signature-control#readme",
15
+ "dependencies": {
16
+ "@shznet/pdf-sign-control": "*",
17
+ "tslib": "^2.3.0"
18
+ },
4
19
  "peerDependencies": {
5
20
  "@angular/common": "^21.0.0",
6
- "@angular/core": "^21.0.0",
7
- "@shznet/pdf-sign-control": "*"
21
+ "@angular/core": "^21.0.0"
8
22
  },
9
23
  "publishConfig": {
10
24
  "access": "public"
@@ -20,8 +34,5 @@
20
34
  "types": "./types/shznet-pdf-sign-angular.d.ts",
21
35
  "default": "./fesm2022/shznet-pdf-sign-angular.mjs"
22
36
  }
23
- },
24
- "dependencies": {
25
- "tslib": "^2.3.0"
26
37
  }
27
38
  }
@@ -67,6 +67,10 @@ declare class PdfSignAngularComponent implements OnInit, OnDestroy, OnChanges {
67
67
  setViewMode(mode: ViewMode): Promise<void>;
68
68
  /** Get current view mode */
69
69
  getViewMode(): ViewMode;
70
+ /** Print the PDF */
71
+ print(options?: {
72
+ withSignatures?: boolean;
73
+ }): Promise<void>;
70
74
  addField(field: any): void;
71
75
  removeField(fieldId: string): void;
72
76
  updateField(fieldId: string, updates: any): void;