@pallasoft/ps-file-components 2.0.0 → 2.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/dist/components/ps-document-scanner-loader.d.ts +1 -1
- package/dist/components/ps-document-scanner-sheet.d.ts +1 -1
- package/dist/components/ps-document-scanner-sheet.js +87 -2
- package/dist/components/ps-document-scanner.d.ts +1 -1
- package/dist/components/ps-document-scanner.js +2 -2
- package/dist/components/ps-file-delete-confirm.js +1 -1
- package/dist/components/ps-image-viewer.js +35 -16
- package/dist/components/ps-pdf-viewer.js +18 -1
- package/dist/components/ps-scan-camera-view.js +2 -2
- package/dist/components/ps-scan-page-strip.d.ts +8 -0
- package/dist/components/ps-scan-page-strip.js +8 -0
- package/dist/components/ps-scan-preview.d.ts +3 -1
- package/dist/components/ps-scan-preview.js +5 -1
- package/dist/components/ps-scan-viewfinder-overlay.d.ts +4 -2
- package/dist/components/ps-scan-viewfinder-overlay.js +6 -6
- package/dist/components/ps-upload-modal.js +1 -1
- package/dist/constants/ps-file-viewer-config.d.ts +1 -0
- package/dist/constants/ps-file-viewer-config.js +1 -0
- package/dist/constants/ps-scan-config.d.ts +7 -3
- package/dist/constants/ps-scan-config.js +7 -3
- package/dist/constants/ps-scan-detect-profiles.d.ts +10 -0
- package/dist/constants/ps-scan-detect-profiles.js +8 -0
- package/dist/esm/components/ps-document-scanner-sheet.js +87 -2
- package/dist/esm/components/ps-document-scanner.js +2 -2
- package/dist/esm/components/ps-file-delete-confirm.js +2 -2
- package/dist/esm/components/ps-image-viewer.js +35 -16
- package/dist/esm/components/ps-pdf-viewer.js +18 -1
- package/dist/esm/components/ps-scan-camera-view.js +2 -2
- package/dist/esm/components/ps-scan-page-strip.js +4 -0
- package/dist/esm/components/ps-scan-preview.js +5 -1
- package/dist/esm/components/ps-scan-viewfinder-overlay.js +6 -6
- package/dist/esm/components/ps-upload-modal.js +2 -2
- package/dist/esm/constants/ps-file-viewer-config.js +1 -0
- package/dist/esm/constants/ps-scan-config.js +7 -3
- package/dist/esm/constants/ps-scan-detect-profiles.js +5 -0
- package/dist/esm/hooks/use-ps-drag-pan.js +66 -0
- package/dist/esm/hooks/use-ps-scan-live-detection.js +47 -22
- package/dist/esm/hooks/use-ps-scan-quad-tween.js +34 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/models/ps-document-scanner-page-labels.js +1 -0
- package/dist/esm/models/ps-drag-pan-handlers.js +1 -0
- package/dist/esm/models/ps-drag-pan-options.js +1 -0
- package/dist/esm/models/ps-scan-detect-profile.js +1 -0
- package/dist/esm/models/ps-scan-multi-page.js +1 -0
- package/dist/esm/models/ps-scan-page.js +1 -0
- package/dist/esm/models/ps-scan-pdf-page.js +1 -0
- package/dist/esm/services/ps-pan-service.js +13 -0
- package/dist/esm/services/ps-scan-edge-service.js +7 -4
- package/dist/esm/services/ps-scan-file-name-service.js +3 -0
- package/dist/esm/services/ps-scan-frame-service.js +10 -0
- package/dist/esm/services/ps-scan-pdf-service.js +69 -0
- package/dist/esm/services/ps-scan-quad-tween-service.js +10 -0
- package/dist/hooks/use-ps-drag-pan.d.ts +3 -0
- package/dist/hooks/use-ps-drag-pan.js +70 -0
- package/dist/hooks/use-ps-scan-live-detection.js +46 -21
- package/dist/hooks/use-ps-scan-quad-tween.d.ts +3 -0
- package/dist/hooks/use-ps-scan-quad-tween.js +38 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/dist/models/ps-document-scanner-page-labels.d.ts +6 -0
- package/dist/models/ps-document-scanner-page-labels.js +2 -0
- package/dist/models/ps-document-scanner-props.d.ts +3 -0
- package/dist/models/ps-document-scanner-sheet-props.d.ts +2 -0
- package/dist/models/ps-drag-pan-handlers.d.ts +8 -0
- package/dist/models/ps-drag-pan-handlers.js +2 -0
- package/dist/models/ps-drag-pan-options.d.ts +9 -0
- package/dist/models/ps-drag-pan-options.js +2 -0
- package/dist/models/ps-scan-detect-profile.d.ts +4 -0
- package/dist/models/ps-scan-detect-profile.js +2 -0
- package/dist/models/ps-scan-live-detection.d.ts +3 -1
- package/dist/models/ps-scan-multi-page.d.ts +9 -0
- package/dist/models/ps-scan-multi-page.js +2 -0
- package/dist/models/ps-scan-page.d.ts +4 -0
- package/dist/models/ps-scan-page.js +2 -0
- package/dist/models/ps-scan-pdf-page.d.ts +5 -0
- package/dist/models/ps-scan-pdf-page.js +2 -0
- package/dist/services/ps-pan-service.d.ts +6 -0
- package/dist/services/ps-pan-service.js +17 -0
- package/dist/services/ps-scan-edge-service.d.ts +2 -1
- package/dist/services/ps-scan-edge-service.js +7 -4
- package/dist/services/ps-scan-file-name-service.d.ts +1 -0
- package/dist/services/ps-scan-file-name-service.js +3 -0
- package/dist/services/ps-scan-frame-service.d.ts +3 -0
- package/dist/services/ps-scan-frame-service.js +14 -0
- package/dist/services/ps-scan-pdf-service.d.ts +10 -0
- package/dist/services/ps-scan-pdf-service.js +73 -0
- package/dist/services/ps-scan-quad-tween-service.d.ts +4 -0
- package/dist/services/ps-scan-quad-tween-service.js +14 -0
- package/package.json +3 -5
|
@@ -6,6 +6,9 @@ class PsScanFileNameService {
|
|
|
6
6
|
static build(base) {
|
|
7
7
|
return `${PsScanFileNameService.sanitize(base)}.jpg`;
|
|
8
8
|
}
|
|
9
|
+
static buildPdf(base) {
|
|
10
|
+
return `${PsScanFileNameService.sanitize(base)}.pdf`;
|
|
11
|
+
}
|
|
9
12
|
static sanitize(base) {
|
|
10
13
|
const cleaned = Array.from(base)
|
|
11
14
|
.filter((char) => char.charCodeAt(0) >= 32)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PsScanFrameService = void 0;
|
|
4
|
+
class PsScanFrameService {
|
|
5
|
+
static schedule(video, callback) {
|
|
6
|
+
if (video !== null && typeof video.requestVideoFrameCallback === 'function') {
|
|
7
|
+
const videoHandle = video.requestVideoFrameCallback(() => callback());
|
|
8
|
+
return () => video.cancelVideoFrameCallback(videoHandle);
|
|
9
|
+
}
|
|
10
|
+
const frameHandle = requestAnimationFrame(() => callback());
|
|
11
|
+
return () => cancelAnimationFrame(frameHandle);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.PsScanFrameService = PsScanFrameService;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { PsPageSize } from '../models/ps-page-size';
|
|
2
|
+
import type { PsScanPage } from '../models/ps-scan-page';
|
|
3
|
+
import type { PsScanPdfPage } from '../models/ps-scan-pdf-page';
|
|
4
|
+
export declare class PsScanPdfService {
|
|
5
|
+
static build(pages: PsScanPage[]): Promise<Blob>;
|
|
6
|
+
static fromJpegs(pages: PsScanPdfPage[]): Blob;
|
|
7
|
+
static pageSize(page: PsScanPdfPage): PsPageSize;
|
|
8
|
+
private static pageObject;
|
|
9
|
+
private static text;
|
|
10
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PsScanPdfService = void 0;
|
|
4
|
+
const ps_scan_config_1 = require("../constants/ps-scan-config");
|
|
5
|
+
class PsScanPdfService {
|
|
6
|
+
static async build(pages) {
|
|
7
|
+
const loaded = [];
|
|
8
|
+
for (const page of pages)
|
|
9
|
+
loaded.push({
|
|
10
|
+
bytes: new Uint8Array(await page.blob.arrayBuffer()),
|
|
11
|
+
height: page.height,
|
|
12
|
+
width: page.width,
|
|
13
|
+
});
|
|
14
|
+
return PsScanPdfService.fromJpegs(loaded);
|
|
15
|
+
}
|
|
16
|
+
static fromJpegs(pages) {
|
|
17
|
+
const chunks = [];
|
|
18
|
+
const offsets = [];
|
|
19
|
+
let length = 0;
|
|
20
|
+
const push = (chunk) => {
|
|
21
|
+
chunks.push(chunk);
|
|
22
|
+
length += chunk.length;
|
|
23
|
+
};
|
|
24
|
+
const begin = (objectNumber) => {
|
|
25
|
+
offsets[objectNumber] = length;
|
|
26
|
+
push(PsScanPdfService.text(`${objectNumber} 0 obj\n`));
|
|
27
|
+
};
|
|
28
|
+
push(PsScanPdfService.text('%PDF-1.4\n'));
|
|
29
|
+
push(new Uint8Array([0x25, 0xe2, 0xe3, 0xcf, 0xd3, 0x0a]));
|
|
30
|
+
begin(1);
|
|
31
|
+
push(PsScanPdfService.text('<< /Type /Catalog /Pages 2 0 R >>\nendobj\n'));
|
|
32
|
+
const kids = pages.map((_, index) => `${PsScanPdfService.pageObject(index)} 0 R`).join(' ');
|
|
33
|
+
begin(2);
|
|
34
|
+
push(PsScanPdfService.text(`<< /Type /Pages /Kids [${kids}] /Count ${pages.length} >>\nendobj\n`));
|
|
35
|
+
pages.forEach((page, index) => {
|
|
36
|
+
const size = PsScanPdfService.pageSize(page);
|
|
37
|
+
const pageNumber = PsScanPdfService.pageObject(index);
|
|
38
|
+
const content = `q ${size.width} 0 0 ${size.height} 0 0 cm /Im0 Do Q`;
|
|
39
|
+
begin(pageNumber);
|
|
40
|
+
push(PsScanPdfService.text(`<< /Type /Page /Parent 2 0 R /MediaBox [0 0 ${size.width} ${size.height}] /Resources << /XObject << /Im0 ${pageNumber + 1} 0 R >> >> /Contents ${pageNumber + 2} 0 R >>\nendobj\n`));
|
|
41
|
+
begin(pageNumber + 1);
|
|
42
|
+
push(PsScanPdfService.text(`<< /Type /XObject /Subtype /Image /Width ${page.width} /Height ${page.height} /ColorSpace /DeviceRGB /BitsPerComponent 8 /Filter /DCTDecode /Length ${page.bytes.length} >>\nstream\n`));
|
|
43
|
+
push(page.bytes);
|
|
44
|
+
push(PsScanPdfService.text('\nendstream\nendobj\n'));
|
|
45
|
+
begin(pageNumber + 2);
|
|
46
|
+
push(PsScanPdfService.text(`<< /Length ${content.length} >>\nstream\n${content}\nendstream\nendobj\n`));
|
|
47
|
+
});
|
|
48
|
+
const count = 3 + pages.length * 3;
|
|
49
|
+
const entries = Array.from({ length: count - 1 }, (_, index) => `${String(offsets[index + 1]).padStart(10, '0')} 00000 n \n`).join('');
|
|
50
|
+
push(PsScanPdfService.text(`xref\n0 ${count}\n0000000000 65535 f \n${entries}trailer\n<< /Size ${count} /Root 1 0 R >>\nstartxref\n${length}\n%%EOF\n`));
|
|
51
|
+
const merged = new Uint8Array(length);
|
|
52
|
+
let cursor = 0;
|
|
53
|
+
for (const chunk of chunks) {
|
|
54
|
+
merged.set(chunk, cursor);
|
|
55
|
+
cursor += chunk.length;
|
|
56
|
+
}
|
|
57
|
+
return new Blob([merged], { type: 'application/pdf' });
|
|
58
|
+
}
|
|
59
|
+
static pageSize(page) {
|
|
60
|
+
const scale = ps_scan_config_1.PsScanConfig.pdfLongEdgePoints / Math.max(page.width, page.height);
|
|
61
|
+
return {
|
|
62
|
+
height: Math.round(page.height * scale * 100) / 100,
|
|
63
|
+
width: Math.round(page.width * scale * 100) / 100,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
static pageObject(index) {
|
|
67
|
+
return 3 + index * 3;
|
|
68
|
+
}
|
|
69
|
+
static text(value) {
|
|
70
|
+
return new TextEncoder().encode(value);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.PsScanPdfService = PsScanPdfService;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PsScanQuadTweenService = void 0;
|
|
4
|
+
const ps_scan_config_1 = require("../constants/ps-scan-config");
|
|
5
|
+
class PsScanQuadTweenService {
|
|
6
|
+
static step(current, target, elapsedMs) {
|
|
7
|
+
const weight = 1 - Math.exp(-Math.max(0, elapsedMs) / ps_scan_config_1.PsScanConfig.liveTweenMs);
|
|
8
|
+
return current.map((point, index) => ({
|
|
9
|
+
x: point.x + (target[index].x - point.x) * weight,
|
|
10
|
+
y: point.y + (target[index].y - point.y) * weight,
|
|
11
|
+
}));
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.PsScanQuadTweenService = PsScanQuadTweenService;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pallasoft/ps-file-components",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/esm/index.js",
|
|
@@ -20,8 +20,6 @@
|
|
|
20
20
|
"scripts": {
|
|
21
21
|
"husky:prepare": "npx husky",
|
|
22
22
|
"build": "tsc && tsc -p tsconfig.esm.json && node -e \"require('fs').writeFileSync('dist/esm/package.json', JSON.stringify({ type: 'module' }))\"",
|
|
23
|
-
"setup:graphify": "sh scripts/graphify-setup.sh",
|
|
24
|
-
"update:graphify": "sh scripts/graphify-update.sh",
|
|
25
23
|
"lint": "npm run lint:eslint",
|
|
26
24
|
"lint:fix": "npm run lint:eslint:fix",
|
|
27
25
|
"format:check": "npx prettier --check --ignore-unknown \"src/**/*.{ts,tsx,json,md}\"",
|
|
@@ -32,9 +30,9 @@
|
|
|
32
30
|
"test": "vitest run"
|
|
33
31
|
},
|
|
34
32
|
"dependencies": {
|
|
35
|
-
"@pallasoft/ps-core-components": "^2.
|
|
33
|
+
"@pallasoft/ps-core-components": "^2.37.0",
|
|
36
34
|
"@pallasoft/ps-icons": "^1.9.0",
|
|
37
|
-
"@pallasoft/ps-popovers": "^1.
|
|
35
|
+
"@pallasoft/ps-popovers": "^1.13.0",
|
|
38
36
|
"@pallasoft/ps-utilities": "^2.19.1",
|
|
39
37
|
"pdfjs-dist": "^6.3.289"
|
|
40
38
|
},
|