@colijnit/sharedcomponents 1.0.4 → 1.0.7
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/.browserslistrc +16 -0
- package/colijnit-sharedcomponents-1.0.7.tgz +0 -0
- package/karma.conf.js +44 -0
- package/ng-package.json +17 -0
- package/package.json +15 -25
- package/src/lib/components/docsign/component/signature/signature.component.ts +82 -0
- package/{lib → src/lib}/components/docsign/component/signature/style/_layout.scss +0 -0
- package/{lib → src/lib}/components/docsign/component/signature/style/_material-definition.scss +0 -0
- package/{lib → src/lib}/components/docsign/component/signature/style/_theme.scss +0 -0
- package/{lib → src/lib}/components/docsign/component/signature/style/material.scss +0 -0
- package/src/lib/components/docsign/component/signatures/signatures.component.ts +50 -0
- package/{lib → src/lib}/components/docsign/component/signatures/style/_layout.scss +0 -0
- package/{lib → src/lib}/components/docsign/component/signatures/style/_material-definition.scss +0 -0
- package/{lib → src/lib}/components/docsign/component/signatures/style/_theme.scss +0 -0
- package/{lib → src/lib}/components/docsign/component/signatures/style/material.scss +0 -0
- package/src/lib/components/docsign/docsign.component.ts +252 -0
- package/src/lib/components/docsign/docsign.module.ts +22 -0
- package/{lib → src/lib}/components/docsign/style/_layout.scss +0 -0
- package/{lib → src/lib}/components/docsign/style/_material-definition.scss +0 -0
- package/{lib → src/lib}/components/docsign/style/_theme.scss +0 -0
- package/{lib → src/lib}/components/docsign/style/material.scss +0 -0
- package/src/lib/components/send-method-dialog/enums/send-option.ts +6 -0
- package/src/lib/components/send-method-dialog/send-method-dialog.component.ts +215 -0
- package/src/lib/components/send-method-dialog/send-method-dialog.module.ts +27 -0
- package/src/lib/components/send-method-dialog/style/_layout.scss +186 -0
- package/src/lib/components/send-method-dialog/style/_material-definition.scss +1 -0
- package/src/lib/components/send-method-dialog/style/_theme.scss +7 -0
- package/{lib/components/stock → src/lib/components/send-method-dialog}/style/material.scss +0 -0
- package/src/lib/components/stock/stock-information/stock-information.component.ts +59 -0
- package/src/lib/components/stock/stock-information-grid/stock-information-grid.component.ts +278 -0
- package/src/lib/components/stock/stock-location/stock-location.component.ts +82 -0
- package/src/lib/components/stock/stock-transfer/co-drop-down-list-fields.interface.ts +4 -0
- package/src/lib/components/stock/stock-transfer/stock-transfer.component.ts +111 -0
- package/src/lib/components/stock/stock.component.ts +78 -0
- package/src/lib/components/stock/stock.module.ts +47 -0
- package/{lib → src/lib}/components/stock/style/_layout.scss +9 -2
- package/{lib → src/lib}/components/stock/style/_material-definition.scss +5 -2
- package/{lib → src/lib}/components/stock/style/_theme.scss +0 -0
- package/src/lib/components/stock/style/material.scss +4 -0
- package/src/lib/enum/icon.enum.ts +22 -0
- package/src/lib/factory/business-object-factory.ts +120 -0
- package/src/lib/factory/decorators/boolean.decorator.ts +113 -0
- package/src/lib/factory/decorators/complex-array.decorator.ts +61 -0
- package/src/lib/factory/decorators/complex-field.decorator.ts +63 -0
- package/src/lib/factory/decorators/date-field.decorator.ts +41 -0
- package/src/lib/factory/decorators/string-number.decorator.ts +48 -0
- package/src/lib/model/business-object.ts +85 -0
- package/src/lib/model/icon-svg.ts +22 -0
- package/src/lib/service/icon-cache.service.ts +51 -0
- package/src/lib/service/ione-connector-adapter.service.ts +113 -0
- package/src/lib/service/stock.service.ts +35 -0
- package/{lib → src/lib}/style/_mixin.scss +0 -0
- package/{lib → src/lib}/style/_variables.scss +0 -0
- package/src/lib/utils/array-utils.ts +202 -0
- package/src/lib/utils/is-nill.function.ts +4 -0
- package/{public-api.d.ts → src/public-api.ts} +6 -0
- package/src/test.ts +27 -0
- package/tsconfig.lib.json +18 -0
- package/tsconfig.lib.prod.json +10 -0
- package/tsconfig.spec.json +17 -0
- package/bundles/colijnit-sharedcomponents.umd.js +0 -1823
- package/bundles/colijnit-sharedcomponents.umd.js.map +0 -1
- package/colijnit-sharedcomponents.d.ts +0 -12
- package/colijnit-sharedcomponents.metadata.json +0 -1
- package/esm2015/colijnit-sharedcomponents.js +0 -13
- package/esm2015/lib/components/docsign/component/signature/signature.component.js +0 -75
- package/esm2015/lib/components/docsign/component/signatures/signatures.component.js +0 -44
- package/esm2015/lib/components/docsign/docsign.component.js +0 -225
- package/esm2015/lib/components/docsign/docsign.module.js +0 -23
- package/esm2015/lib/components/stock/stock-information/stock-information.component.js +0 -54
- package/esm2015/lib/components/stock/stock-information-grid/stock-information-grid.component.js +0 -255
- package/esm2015/lib/components/stock/stock-location/stock-location.component.js +0 -62
- package/esm2015/lib/components/stock/stock-transfer/stock-transfer.component.js +0 -71
- package/esm2015/lib/components/stock/stock.component.js +0 -61
- package/esm2015/lib/components/stock/stock.module.js +0 -42
- package/esm2015/lib/factory/business-object-factory.js +0 -120
- package/esm2015/lib/factory/decorators/boolean.decorator.js +0 -102
- package/esm2015/lib/factory/decorators/complex-array.decorator.js +0 -55
- package/esm2015/lib/factory/decorators/complex-field.decorator.js +0 -57
- package/esm2015/lib/factory/decorators/date-field.decorator.js +0 -36
- package/esm2015/lib/factory/decorators/string-number.decorator.js +0 -43
- package/esm2015/lib/model/business-object.js +0 -81
- package/esm2015/lib/service/ione-connector-adapter.service.js +0 -47
- package/esm2015/lib/service/stock.service.js +0 -40
- package/esm2015/lib/utils/array-utils.js +0 -183
- package/esm2015/lib/utils/is-nill.function.js +0 -5
- package/esm2015/public-api.js +0 -8
- package/fesm2015/colijnit-sharedcomponents.js +0 -1649
- package/fesm2015/colijnit-sharedcomponents.js.map +0 -1
- package/lib/components/docsign/component/signature/signature.component.d.ts +0 -16
- package/lib/components/docsign/component/signatures/signatures.component.d.ts +0 -12
- package/lib/components/docsign/docsign.component.d.ts +0 -92
- package/lib/components/docsign/docsign.module.d.ts +0 -2
- package/lib/components/stock/stock-information/stock-information.component.d.ts +0 -7
- package/lib/components/stock/stock-information-grid/stock-information-grid.component.d.ts +0 -43
- package/lib/components/stock/stock-location/stock-location.component.d.ts +0 -12
- package/lib/components/stock/stock-transfer/stock-transfer.component.d.ts +0 -9
- package/lib/components/stock/stock.component.d.ts +0 -18
- package/lib/components/stock/stock.module.d.ts +0 -2
- package/lib/factory/business-object-factory.d.ts +0 -23
- package/lib/factory/decorators/boolean.decorator.d.ts +0 -43
- package/lib/factory/decorators/complex-array.decorator.d.ts +0 -25
- package/lib/factory/decorators/complex-field.decorator.d.ts +0 -25
- package/lib/factory/decorators/date-field.decorator.d.ts +0 -17
- package/lib/factory/decorators/string-number.decorator.d.ts +0 -22
- package/lib/model/business-object.d.ts +0 -7
- package/lib/service/ione-connector-adapter.service.d.ts +0 -11
- package/lib/service/stock.service.d.ts +0 -9
- package/lib/utils/array-utils.d.ts +0 -57
- package/lib/utils/is-nill.function.d.ts +0 -1
package/.browserslistrc
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
|
|
2
|
+
# For additional information regarding the format and rule options, please see:
|
|
3
|
+
# https://github.com/browserslist/browserslist#queries
|
|
4
|
+
|
|
5
|
+
# For the full list of supported browsers by the Angular framework, please see:
|
|
6
|
+
# https://angular.io/guide/browser-support
|
|
7
|
+
|
|
8
|
+
# You can see what browsers were selected by your queries by running:
|
|
9
|
+
# npx browserslist
|
|
10
|
+
|
|
11
|
+
last 1 Chrome version
|
|
12
|
+
last 1 Firefox version
|
|
13
|
+
last 2 Edge major versions
|
|
14
|
+
last 2 Safari major versions
|
|
15
|
+
last 2 iOS major versions
|
|
16
|
+
Firefox ESR
|
|
Binary file
|
package/karma.conf.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// Karma configuration file, see link for more information
|
|
2
|
+
// https://karma-runner.github.io/1.0/config/configuration-file.html
|
|
3
|
+
|
|
4
|
+
module.exports = function (config) {
|
|
5
|
+
config.set({
|
|
6
|
+
basePath: '',
|
|
7
|
+
frameworks: ['jasmine', '@angular-devkit/build-angular'],
|
|
8
|
+
plugins: [
|
|
9
|
+
require('karma-jasmine'),
|
|
10
|
+
require('karma-chrome-launcher'),
|
|
11
|
+
require('karma-jasmine-html-reporter'),
|
|
12
|
+
require('karma-coverage'),
|
|
13
|
+
require('@angular-devkit/build-angular/plugins/karma')
|
|
14
|
+
],
|
|
15
|
+
client: {
|
|
16
|
+
jasmine: {
|
|
17
|
+
// you can add configuration options for Jasmine here
|
|
18
|
+
// the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
|
|
19
|
+
// for example, you can disable the random execution with `random: false`
|
|
20
|
+
// or set a specific seed with `seed: 4321`
|
|
21
|
+
},
|
|
22
|
+
clearContext: false // leave Jasmine Spec Runner output visible in browser
|
|
23
|
+
},
|
|
24
|
+
jasmineHtmlReporter: {
|
|
25
|
+
suppressAll: true // removes the duplicated traces
|
|
26
|
+
},
|
|
27
|
+
coverageReporter: {
|
|
28
|
+
dir: require('path').join(__dirname, '../../coverage/sharedcomponents'),
|
|
29
|
+
subdir: '.',
|
|
30
|
+
reporters: [
|
|
31
|
+
{ type: 'html' },
|
|
32
|
+
{ type: 'text-summary' }
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
reporters: ['progress', 'kjhtml'],
|
|
36
|
+
port: 9876,
|
|
37
|
+
colors: true,
|
|
38
|
+
logLevel: config.LOG_INFO,
|
|
39
|
+
autoWatch: true,
|
|
40
|
+
browsers: ['Chrome'],
|
|
41
|
+
singleRun: false,
|
|
42
|
+
restartOnFileChange: true
|
|
43
|
+
});
|
|
44
|
+
};
|
package/ng-package.json
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
|
|
3
|
+
"dest": "../../dist/sharedcomponents",
|
|
4
|
+
"allowedNonPeerDependencies": [
|
|
5
|
+
"."
|
|
6
|
+
],
|
|
7
|
+
"lib": {
|
|
8
|
+
"entryFile": "src/public-api.ts",
|
|
9
|
+
"styleIncludePaths": [
|
|
10
|
+
"../../node_modules/@syncfusion",
|
|
11
|
+
"../../node_modules/@colijnit"
|
|
12
|
+
]
|
|
13
|
+
},
|
|
14
|
+
"assets": [
|
|
15
|
+
"**/*.scss"
|
|
16
|
+
]
|
|
17
|
+
}
|
package/package.json
CHANGED
|
@@ -1,25 +1,15 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@colijnit/sharedcomponents",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"private": false,
|
|
5
|
-
"peerDependencies": {
|
|
6
|
-
"@angular/common": "^12.2.0",
|
|
7
|
-
"@angular/core": "^12.2.0",
|
|
8
|
-
"pdf-lib": "^1.17.1",
|
|
9
|
-
"pdfjs-dist": "^2.12.313",
|
|
10
|
-
"rxjs": "~7.4.0",
|
|
11
|
-
"signature_pad": "^4.0.2",
|
|
12
|
-
"
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
"es2015": "fesm2015/colijnit-sharedcomponents.js",
|
|
17
|
-
"esm2015": "esm2015/colijnit-sharedcomponents.js",
|
|
18
|
-
"fesm2015": "fesm2015/colijnit-sharedcomponents.js",
|
|
19
|
-
"typings": "colijnit-sharedcomponents.d.ts",
|
|
20
|
-
"metadata": "colijnit-sharedcomponents.metadata.json",
|
|
21
|
-
"sideEffects": false,
|
|
22
|
-
"dependencies": {
|
|
23
|
-
"tslib": "^2.3.0"
|
|
24
|
-
}
|
|
25
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@colijnit/sharedcomponents",
|
|
3
|
+
"version": "1.0.7",
|
|
4
|
+
"private": false,
|
|
5
|
+
"peerDependencies": {
|
|
6
|
+
"@angular/common": "^12.2.0",
|
|
7
|
+
"@angular/core": "^12.2.0",
|
|
8
|
+
"pdf-lib": "^1.17.1",
|
|
9
|
+
"pdfjs-dist": "^2.12.313",
|
|
10
|
+
"rxjs": "~7.4.0",
|
|
11
|
+
"signature_pad": "^4.0.2",
|
|
12
|
+
"tslib": "^2.3.0",
|
|
13
|
+
"zone.js": "~0.11.4"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import {Component, ElementRef, EventEmitter, HostBinding, Input, OnInit, Output, ViewChild, ViewEncapsulation} from "@angular/core";
|
|
2
|
+
import SignaturePad from "signature_pad";
|
|
3
|
+
|
|
4
|
+
@Component({
|
|
5
|
+
selector: "ione-signature",
|
|
6
|
+
template: `
|
|
7
|
+
<div class="signature-wrapper">
|
|
8
|
+
<div class="signature-header">
|
|
9
|
+
<span *ngIf="title" class="title" [textContent]="title"></span>
|
|
10
|
+
<div class="button-wrapper">
|
|
11
|
+
<input type="button" (click)="handleSave($event)" [value]="saveButtonLabel"/>
|
|
12
|
+
<input type="button" (click)="handleClear($event)" [value]="clearButtonLabel">
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
<div class="canvas">
|
|
16
|
+
<canvas #signature></canvas>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
`,
|
|
20
|
+
encapsulation: ViewEncapsulation.None
|
|
21
|
+
})
|
|
22
|
+
export class SignatureComponent {
|
|
23
|
+
@ViewChild("signature", {read: ElementRef}) set content(content: ElementRef) {
|
|
24
|
+
if (content) {
|
|
25
|
+
this.signatureCanvas = content;
|
|
26
|
+
this._initCanvas();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@Input()
|
|
31
|
+
public title: string;
|
|
32
|
+
|
|
33
|
+
@Input()
|
|
34
|
+
public saveButtonLabel: string = 'SAVE';
|
|
35
|
+
|
|
36
|
+
@Input()
|
|
37
|
+
public clearButtonLabel: string = 'CLEAR';
|
|
38
|
+
|
|
39
|
+
@Output()
|
|
40
|
+
public save: EventEmitter<string> = new EventEmitter<string>();
|
|
41
|
+
|
|
42
|
+
@HostBinding("class.ione-signature")
|
|
43
|
+
public showClass() {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public signature: SignaturePad;
|
|
48
|
+
public signatureCanvas: ElementRef;
|
|
49
|
+
|
|
50
|
+
public handleSave(event: MouseEvent): void {
|
|
51
|
+
// save canvas as svg
|
|
52
|
+
// const sig: string = this.signature.toDataURL("image/svg+xml");
|
|
53
|
+
const sig: string = this.signature.toDataURL("image/png");
|
|
54
|
+
// emit signature string
|
|
55
|
+
this.save.next(sig);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
public handleClear(event: MouseEvent): void {
|
|
59
|
+
if (this.signature) {
|
|
60
|
+
this.signature.clear();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
private _initCanvas(): void {
|
|
65
|
+
if (this.signatureCanvas && this.signatureCanvas.nativeElement) {
|
|
66
|
+
this.signature = new SignaturePad(this.signatureCanvas.nativeElement);
|
|
67
|
+
setTimeout(() => {
|
|
68
|
+
this._resizeSignatureCanvas(this.signature, this.signatureCanvas);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
private _resizeSignatureCanvas(signature: SignaturePad, signatureCanvas: ElementRef): void {
|
|
74
|
+
const imageBeforeResize: string = signature.toDataURL();
|
|
75
|
+
const ratio: number = Math.max(window.devicePixelRatio || 1, 1);
|
|
76
|
+
signatureCanvas.nativeElement.width = signatureCanvas.nativeElement.offsetWidth * ratio;
|
|
77
|
+
signatureCanvas.nativeElement.height = signatureCanvas.nativeElement.offsetHeight * ratio;
|
|
78
|
+
signatureCanvas.nativeElement.getContext("2d").scale(ratio, ratio);
|
|
79
|
+
signature.fromDataURL(imageBeforeResize);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
}
|
|
File without changes
|
package/{lib → src/lib}/components/docsign/component/signature/style/_material-definition.scss
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import {Component, EventEmitter, HostBinding, Input, Output, ViewEncapsulation} from "@angular/core";
|
|
2
|
+
|
|
3
|
+
@Component({
|
|
4
|
+
selector: "ione-signatures",
|
|
5
|
+
template: `
|
|
6
|
+
<ione-signature *ngIf="showFirstSignature"
|
|
7
|
+
[title]="firstSignatureTitle"
|
|
8
|
+
[saveButtonLabel]="saveButtonLabel"
|
|
9
|
+
[clearButtonLabel]="clearButtonLabel"
|
|
10
|
+
(save)="saveFirstSignature.emit($event)"></ione-signature>
|
|
11
|
+
<ione-signature *ngIf="showSecondSignature"
|
|
12
|
+
[title]="secondSignatureTitle"
|
|
13
|
+
[saveButtonLabel]="saveButtonLabel"
|
|
14
|
+
[clearButtonLabel]="clearButtonLabel"
|
|
15
|
+
(save)="saveSecondSignature.emit($event)"></ione-signature>
|
|
16
|
+
`,
|
|
17
|
+
encapsulation: ViewEncapsulation.None
|
|
18
|
+
})
|
|
19
|
+
export class SignaturesComponent {
|
|
20
|
+
|
|
21
|
+
@Input()
|
|
22
|
+
public showFirstSignature: boolean = false;
|
|
23
|
+
|
|
24
|
+
@Input()
|
|
25
|
+
public firstSignatureTitle: string;
|
|
26
|
+
|
|
27
|
+
@Input()
|
|
28
|
+
public showSecondSignature: boolean = false;
|
|
29
|
+
|
|
30
|
+
@Input()
|
|
31
|
+
public secondSignatureTitle: string;
|
|
32
|
+
|
|
33
|
+
@Input()
|
|
34
|
+
public saveButtonLabel: string = 'SAVE';
|
|
35
|
+
|
|
36
|
+
@Input()
|
|
37
|
+
public clearButtonLabel: string = 'CLEAR';
|
|
38
|
+
|
|
39
|
+
@Output()
|
|
40
|
+
public saveFirstSignature: EventEmitter<string> = new EventEmitter<string>();
|
|
41
|
+
|
|
42
|
+
@Output()
|
|
43
|
+
public saveSecondSignature: EventEmitter<string> = new EventEmitter<string>();
|
|
44
|
+
|
|
45
|
+
@HostBinding("class.ione-signatures")
|
|
46
|
+
public showClass() {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
}
|
|
File without changes
|
package/{lib → src/lib}/components/docsign/component/signatures/style/_material-definition.scss
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import {Component, ElementRef, EventEmitter, HostBinding, Input, Output, ViewChild, ViewEncapsulation} from "@angular/core";
|
|
2
|
+
import {animate, state, style, transition, trigger} from "@angular/animations";
|
|
3
|
+
import {PDFDocument} from "pdf-lib";
|
|
4
|
+
import * as PDFJS from "pdfjs-dist/legacy/build/pdf";
|
|
5
|
+
import pdfjsWorker from "pdfjs-dist/build/pdf.worker.entry";
|
|
6
|
+
import {TextItem} from "pdfjs-dist/types/src/display/api";
|
|
7
|
+
|
|
8
|
+
export interface TextDimension {
|
|
9
|
+
x: number,
|
|
10
|
+
y: number,
|
|
11
|
+
width: number,
|
|
12
|
+
height: number,
|
|
13
|
+
page: number
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@Component({
|
|
17
|
+
selector: "ione-docsign",
|
|
18
|
+
template: `
|
|
19
|
+
<iframe #iframe></iframe>
|
|
20
|
+
<ione-signatures *ngIf="showSignatures" @showHideSignature
|
|
21
|
+
[showFirstSignature]="showSigBuyer"
|
|
22
|
+
[firstSignatureTitle]="firstSignatureLabel"
|
|
23
|
+
[showSecondSignature]="showSigSeller"
|
|
24
|
+
[secondSignatureTitle]="secondSignatureLabel"
|
|
25
|
+
[saveButtonLabel]="saveButtonLabel"
|
|
26
|
+
[clearButtonLabel]="clearButtonLabel"
|
|
27
|
+
(saveFirstSignature)="saveFirstSignature($event)"
|
|
28
|
+
(saveSecondSignature)="saveSecondSignature($event)"
|
|
29
|
+
></ione-signatures>
|
|
30
|
+
<input type="button" *ngIf="(showSigBuyer || showSigSeller) && !showSignatures" class="button button-sign-document"
|
|
31
|
+
[value]="signDocumentButtonLabel"
|
|
32
|
+
(click)="showSignatures = true"
|
|
33
|
+
/>
|
|
34
|
+
<input type="button" class="button button-cancel"
|
|
35
|
+
[value]="cancelButtonLabel"
|
|
36
|
+
(click)="cancelClick.emit($event)"
|
|
37
|
+
/>
|
|
38
|
+
`,
|
|
39
|
+
animations: [
|
|
40
|
+
trigger("showHideSignature", [
|
|
41
|
+
state("void", style({transform: "translate(-50%, -50%) scale(0)"})),
|
|
42
|
+
state("*", style({transform: "translate(-50%, -50%) scale(1)"})),
|
|
43
|
+
transition("void <=> *", animate("200ms ease-in-out")),
|
|
44
|
+
])
|
|
45
|
+
],
|
|
46
|
+
encapsulation: ViewEncapsulation.None
|
|
47
|
+
})
|
|
48
|
+
export class DocsignComponent {
|
|
49
|
+
@ViewChild("iframe", { read: ElementRef })
|
|
50
|
+
public iframe: ElementRef;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Load an existing [[PDFDocument]]. The input data can be provided in
|
|
54
|
+
* multiple formats:
|
|
55
|
+
*
|
|
56
|
+
* | Type | Contents |
|
|
57
|
+
* | ------------- | ------------------------------------------------------ |
|
|
58
|
+
* | `string` | A base64 encoded string (or data URI) containing a PDF |
|
|
59
|
+
* | `Uint8Array` | The raw bytes of a PDF |
|
|
60
|
+
* | `ArrayBuffer` | The raw bytes of a PDF |
|
|
61
|
+
*
|
|
62
|
+
* For example:
|
|
63
|
+
* ```js
|
|
64
|
+
* import { PDFDocument } from 'pdf-lib'
|
|
65
|
+
*
|
|
66
|
+
* // pdf=string
|
|
67
|
+
* const base64 =
|
|
68
|
+
* 'JVBERi0xLjcKJYGBgYEKCjUgMCBvYmoKPDwKL0ZpbHRlciAvRmxhdGVEZWNvZGUKL0xlbm' +
|
|
69
|
+
* 'd0aCAxMDQKPj4Kc3RyZWFtCniccwrhMlAAwaJ0Ln2P1Jyy1JLM5ERdc0MjCwUjE4WQNC4Q' +
|
|
70
|
+
* '6cNlCFZkqGCqYGSqEJLLZWNuYGZiZmbkYuZsZmlmZGRgZmluDCQNzc3NTM2NzdzMXMxMjQ' +
|
|
71
|
+
* 'ztFEKyuEK0uFxDuAAOERdVCmVuZHN0cmVhbQplbmRvYmoKCjYgMCBvYmoKPDwKL0ZpbHRl' +
|
|
72
|
+
* 'ciAvRmxhdGVEZWNvZGUKL1R5cGUgL09ialN0bQovTiA0Ci9GaXJzdCAyMAovTGVuZ3RoID' +
|
|
73
|
+
* 'IxNQo+PgpzdHJlYW0KeJxVj9GqwjAMhu/zFHkBzTo3nCCCiiKIHPEICuJF3cKoSCu2E8/b' +
|
|
74
|
+
* '20wPIr1p8v9/8kVhgilmGfawX2CGaVrgcAi0/bsy0lrX7IGWpvJ4iJYEN3gEmrrGBlQwGs' +
|
|
75
|
+
* 'HHO9VBX1wNrxAqMX87RBD5xpJuddqwd82tjAHxzV1U5LPgy52DKXWnr1Lheg+j/c/pzGVr' +
|
|
76
|
+
* 'iqV0VlwZPXGPCJjElw/ybkwUmeoWgxesDXGhHJC/D/iikp1Av80ptKU0FdBEe25pPihAM1' +
|
|
77
|
+
* 'u6ytgaaWfs2Hrz35CJT1+EWmAKZW5kc3RyZWFtCmVuZG9iagoKNyAwIG9iago8PAovU2l6' +
|
|
78
|
+
* 'ZSA4Ci9Sb290IDIgMCBSCi9GaWx0ZXIgL0ZsYXRlRGVjb2RlCi9UeXBlIC9YUmVmCi9MZW' +
|
|
79
|
+
* '5ndGggMzgKL1cgWyAxIDIgMiBdCi9JbmRleCBbIDAgOCBdCj4+CnN0cmVhbQp4nBXEwREA' +
|
|
80
|
+
* 'EBAEsCwz3vrvRmOOyyOoGhZdutHN2MT55fIAVocD+AplbmRzdHJlYW0KZW5kb2JqCgpzdG' +
|
|
81
|
+
* 'FydHhyZWYKNTEwCiUlRU9G'
|
|
82
|
+
*
|
|
83
|
+
* const dataUri = 'data:application/pdf;base64,' + base64
|
|
84
|
+
*
|
|
85
|
+
* const pdfDoc1 = await PDFDocument.load(base64)
|
|
86
|
+
* const pdfDoc2 = await PDFDocument.load(dataUri)
|
|
87
|
+
*
|
|
88
|
+
* // pdf=Uint8Array
|
|
89
|
+
* import fs from 'fs'
|
|
90
|
+
* const uint8Array = fs.readFileSync('with_update_sections.pdf')
|
|
91
|
+
* const pdfDoc3 = await PDFDocument.load(uint8Array)
|
|
92
|
+
*
|
|
93
|
+
* // pdf=ArrayBuffer
|
|
94
|
+
* const url = 'https://pdf-lib.js.org/assets/with_update_sections.pdf'
|
|
95
|
+
* const arrayBuffer = await fetch(url).then(res => res.arrayBuffer())
|
|
96
|
+
* const pdfDoc4 = await PDFDocument.load(arrayBuffer)
|
|
97
|
+
*
|
|
98
|
+
* ```
|
|
99
|
+
*
|
|
100
|
+
* @param pdf The input data containing a PDF document.
|
|
101
|
+
* @param options The options to be used when loading the document.
|
|
102
|
+
* @returns Resolves with a document loaded from the input.
|
|
103
|
+
*/
|
|
104
|
+
@Input()
|
|
105
|
+
public set pdf(value: any) {
|
|
106
|
+
if (value) {
|
|
107
|
+
this._pdf = value;
|
|
108
|
+
this._openPDF();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
public get pdf(): any {
|
|
113
|
+
return this._pdf;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
@Input()
|
|
117
|
+
public firstSignatureLabel: string;
|
|
118
|
+
|
|
119
|
+
@Input()
|
|
120
|
+
public firstSignatureField: string;
|
|
121
|
+
|
|
122
|
+
@Input()
|
|
123
|
+
public secondSignatureLabel: string;
|
|
124
|
+
|
|
125
|
+
@Input()
|
|
126
|
+
public secondSignatureField: string;
|
|
127
|
+
|
|
128
|
+
@Input()
|
|
129
|
+
public saveButtonLabel: string = 'SAVE';
|
|
130
|
+
|
|
131
|
+
@Input()
|
|
132
|
+
public clearButtonLabel: string = 'CLEAR';
|
|
133
|
+
|
|
134
|
+
@Input()
|
|
135
|
+
public signDocumentButtonLabel: string = 'SIGN_DOCUMENT';
|
|
136
|
+
|
|
137
|
+
@Input()
|
|
138
|
+
public cancelButtonLabel: string = 'CANCEL';
|
|
139
|
+
|
|
140
|
+
@Output()
|
|
141
|
+
public pdfSaved: EventEmitter<string> = new EventEmitter<string>();
|
|
142
|
+
|
|
143
|
+
@Output()
|
|
144
|
+
public cancelClick: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();
|
|
145
|
+
|
|
146
|
+
@HostBinding('class.ione-docsign')
|
|
147
|
+
public showClass() {
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
public showSignaturePopup: boolean = false;
|
|
152
|
+
public showSigBuyer: boolean = false;
|
|
153
|
+
public sigBuyerPosition: TextDimension;
|
|
154
|
+
public showSigSeller: boolean = false;
|
|
155
|
+
public sigSellerPosition: TextDimension;
|
|
156
|
+
public showSignatures: boolean = false;
|
|
157
|
+
|
|
158
|
+
public pdfDoc: PDFDocument;
|
|
159
|
+
|
|
160
|
+
private _pdf: any;
|
|
161
|
+
|
|
162
|
+
public saveFirstSignature(sig: string): void {
|
|
163
|
+
this._saveSignature(sig, this.sigBuyerPosition);
|
|
164
|
+
this.showSigBuyer = false;
|
|
165
|
+
this._savePdf();
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
public saveSecondSignature(sig: string): void {
|
|
169
|
+
this._saveSignature(sig, this.sigSellerPosition);
|
|
170
|
+
this.showSigSeller = false;
|
|
171
|
+
this._savePdf();
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
private async _openPDF(): Promise<void> {
|
|
175
|
+
// first create reader to check signatures
|
|
176
|
+
this._checkSignatures();
|
|
177
|
+
|
|
178
|
+
this.pdfDoc = await PDFDocument.load(this._pdf, {
|
|
179
|
+
updateMetadata: false
|
|
180
|
+
});
|
|
181
|
+
const pdfDataUri = await this.pdfDoc.saveAsBase64({ dataUri: true });
|
|
182
|
+
this.iframe.nativeElement.src = pdfDataUri;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
private async _savePdf(): Promise<void> {
|
|
186
|
+
if (!this.showSigBuyer && !this.showSigSeller) {
|
|
187
|
+
// ready, save the pdf and emit result
|
|
188
|
+
const result = await this.pdfDoc.saveAsBase64();
|
|
189
|
+
this.pdfSaved.next(result);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
private async _checkSignatures(): Promise<void> {
|
|
194
|
+
let pdfWorkerSrc;
|
|
195
|
+
if (window.hasOwnProperty('pdfWorkerSrc') &&
|
|
196
|
+
typeof (window as any).pdfWorkerSrc === 'string' &&
|
|
197
|
+
(window as any).pdfWorkerSrc) {
|
|
198
|
+
pdfWorkerSrc = (window as any).pdfWorkerSrc;
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
pdfWorkerSrc = pdfjsWorker;
|
|
202
|
+
}
|
|
203
|
+
PDFJS.GlobalWorkerOptions.workerSrc = pdfWorkerSrc;
|
|
204
|
+
const pdfReader = await PDFJS.getDocument(this._pdf).promise;
|
|
205
|
+
const numPages = pdfReader.numPages;
|
|
206
|
+
for (let i = 0; i < numPages; i++) {
|
|
207
|
+
const page = await pdfReader.getPage(i + 1);
|
|
208
|
+
const text = await page.getTextContent();
|
|
209
|
+
page.cleanup();
|
|
210
|
+
if (this.firstSignatureField) {
|
|
211
|
+
this.sigBuyerPosition = this._getPositionSignature(text, this.firstSignatureField);
|
|
212
|
+
if (this.sigBuyerPosition.width > 0 && this.sigBuyerPosition.height > 0) {
|
|
213
|
+
this.sigBuyerPosition.page = i;
|
|
214
|
+
this.showSigBuyer = true;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (this.secondSignatureField) {
|
|
218
|
+
this.sigSellerPosition = this._getPositionSignature(text, this.secondSignatureField);
|
|
219
|
+
if (this.sigSellerPosition.width > 0 && this.sigSellerPosition.height > 0) {
|
|
220
|
+
this.sigSellerPosition.page = i;
|
|
221
|
+
this.showSigSeller = true;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
private _getPositionSignature(textItem: any, signatureField: string): TextDimension {
|
|
228
|
+
const sigItem: TextItem = <TextItem>textItem.items.find((i: any) => i.str.toLowerCase() === signatureField.toLowerCase());
|
|
229
|
+
if (sigItem) {
|
|
230
|
+
textItem.items.slice(textItem.items.indexOf(sigItem), 1);
|
|
231
|
+
return {
|
|
232
|
+
x: sigItem.transform[4],
|
|
233
|
+
y: sigItem.transform[5],
|
|
234
|
+
width: sigItem.width,
|
|
235
|
+
height: sigItem.height,
|
|
236
|
+
page: 0
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
return {x: 0, y: 0, width: 0, height: 0, page: 0}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
private async _saveSignature(sig: string, dimensions: TextDimension): Promise<void> {
|
|
243
|
+
const jpgImage = await this.pdfDoc.embedPng(sig);
|
|
244
|
+
const page = await this.pdfDoc.getPage(dimensions.page);
|
|
245
|
+
page.drawImage(jpgImage, {
|
|
246
|
+
x: ((dimensions.x + (dimensions.width / 2)) - (200 / 2)),
|
|
247
|
+
y: ((dimensions.y + (dimensions.height / 2)) - (100 / 2)),
|
|
248
|
+
width: 200,
|
|
249
|
+
height: 100
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import {NgModule} from "@angular/core";
|
|
2
|
+
import {CommonModule} from "@angular/common";
|
|
3
|
+
import {DocsignComponent} from "./docsign.component";
|
|
4
|
+
import {SignatureComponent} from "./component/signature/signature.component";
|
|
5
|
+
import {SignaturesComponent} from "./component/signatures/signatures.component";
|
|
6
|
+
|
|
7
|
+
@NgModule({
|
|
8
|
+
imports: [
|
|
9
|
+
CommonModule
|
|
10
|
+
],
|
|
11
|
+
declarations: [
|
|
12
|
+
DocsignComponent,
|
|
13
|
+
SignatureComponent,
|
|
14
|
+
SignaturesComponent
|
|
15
|
+
],
|
|
16
|
+
exports: [
|
|
17
|
+
DocsignComponent
|
|
18
|
+
]
|
|
19
|
+
})
|
|
20
|
+
export class DocsignModule {
|
|
21
|
+
|
|
22
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|