@rajeev02/document 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.
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ /**
3
+ * @rajeev02/document — Picker
4
+ * Universal document picker: gallery, camera, files, cloud, recent, multi-select
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.categorizeFile = categorizeFile;
8
+ exports.getMimeTypesForCategory = getMimeTypesForCategory;
9
+ exports.formatFileSize = formatFileSize;
10
+ exports.getFileExtension = getFileExtension;
11
+ exports.getFileIcon = getFileIcon;
12
+ exports.getPickerPreset = getPickerPreset;
13
+ /** MIME type to category mapping */
14
+ function categorizeFile(mimeType) {
15
+ if (mimeType.startsWith("image/"))
16
+ return "image";
17
+ if (mimeType.startsWith("video/"))
18
+ return "video";
19
+ if (mimeType.startsWith("audio/"))
20
+ return "audio";
21
+ if (mimeType === "application/pdf")
22
+ return "pdf";
23
+ if (mimeType.includes("word") ||
24
+ mimeType.includes("document") ||
25
+ mimeType.includes("text"))
26
+ return "document";
27
+ if (mimeType.includes("sheet") ||
28
+ mimeType.includes("excel") ||
29
+ mimeType.includes("csv"))
30
+ return "spreadsheet";
31
+ if (mimeType.includes("presentation") || mimeType.includes("powerpoint"))
32
+ return "presentation";
33
+ if (mimeType.includes("zip") ||
34
+ mimeType.includes("rar") ||
35
+ mimeType.includes("tar") ||
36
+ mimeType.includes("7z"))
37
+ return "archive";
38
+ return "any";
39
+ }
40
+ /** Get MIME types for a category */
41
+ function getMimeTypesForCategory(category) {
42
+ switch (category) {
43
+ case "image":
44
+ return [
45
+ "image/jpeg",
46
+ "image/png",
47
+ "image/gif",
48
+ "image/webp",
49
+ "image/heic",
50
+ "image/heif",
51
+ "image/bmp",
52
+ "image/svg+xml",
53
+ ];
54
+ case "video":
55
+ return [
56
+ "video/mp4",
57
+ "video/quicktime",
58
+ "video/x-msvideo",
59
+ "video/webm",
60
+ "video/3gpp",
61
+ ];
62
+ case "audio":
63
+ return [
64
+ "audio/mpeg",
65
+ "audio/wav",
66
+ "audio/ogg",
67
+ "audio/aac",
68
+ "audio/flac",
69
+ "audio/x-m4a",
70
+ ];
71
+ case "pdf":
72
+ return ["application/pdf"];
73
+ case "document":
74
+ return [
75
+ "application/msword",
76
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
77
+ "text/plain",
78
+ "text/rtf",
79
+ "application/rtf",
80
+ ];
81
+ case "spreadsheet":
82
+ return [
83
+ "application/vnd.ms-excel",
84
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
85
+ "text/csv",
86
+ ];
87
+ case "presentation":
88
+ return [
89
+ "application/vnd.ms-powerpoint",
90
+ "application/vnd.openxmlformats-officedocument.presentationml.presentation",
91
+ ];
92
+ case "archive":
93
+ return [
94
+ "application/zip",
95
+ "application/x-rar-compressed",
96
+ "application/x-7z-compressed",
97
+ "application/gzip",
98
+ ];
99
+ case "any":
100
+ return ["*/*"];
101
+ default:
102
+ return ["*/*"];
103
+ }
104
+ }
105
+ /** Format file size for display */
106
+ function formatFileSize(bytes) {
107
+ if (bytes < 1024)
108
+ return `${bytes} B`;
109
+ if (bytes < 1024 * 1024)
110
+ return `${(bytes / 1024).toFixed(1)} KB`;
111
+ if (bytes < 1024 * 1024 * 1024)
112
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
113
+ return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)} GB`;
114
+ }
115
+ /** Get file extension from name or URI */
116
+ function getFileExtension(nameOrUri) {
117
+ const parts = nameOrUri.split(".");
118
+ return parts.length > 1
119
+ ? parts[parts.length - 1].toLowerCase().split("?")[0]
120
+ : "";
121
+ }
122
+ /** Get icon name for file category (for UI rendering) */
123
+ function getFileIcon(category) {
124
+ const icons = {
125
+ image: "image",
126
+ video: "film",
127
+ audio: "music",
128
+ pdf: "file-text",
129
+ document: "file-text",
130
+ spreadsheet: "table",
131
+ presentation: "monitor",
132
+ archive: "archive",
133
+ any: "file",
134
+ };
135
+ return icons[category] ?? "file";
136
+ }
137
+ /** Default picker configs for common use cases */
138
+ function getPickerPreset(preset) {
139
+ switch (preset) {
140
+ case "photo":
141
+ return {
142
+ sources: ["gallery", "camera"],
143
+ categories: ["image"],
144
+ multiple: false,
145
+ compressImages: true,
146
+ maxImageDimension: 2048,
147
+ maxSizeBytes: 10 * 1024 * 1024,
148
+ };
149
+ case "video":
150
+ return {
151
+ sources: ["gallery", "camera"],
152
+ categories: ["video"],
153
+ multiple: false,
154
+ maxSizeBytes: 100 * 1024 * 1024,
155
+ };
156
+ case "document":
157
+ return {
158
+ sources: ["files", "google_drive", "recent"],
159
+ categories: ["pdf", "document", "spreadsheet"],
160
+ multiple: true,
161
+ maxFiles: 10,
162
+ maxSizeBytes: 25 * 1024 * 1024,
163
+ };
164
+ case "kyc_document":
165
+ return {
166
+ sources: ["camera", "gallery"],
167
+ categories: ["image", "pdf"],
168
+ multiple: false,
169
+ enableDocumentScan: true,
170
+ compressImages: true,
171
+ maxSizeBytes: 5 * 1024 * 1024,
172
+ };
173
+ case "any":
174
+ return {
175
+ sources: ["files", "gallery", "camera", "google_drive", "recent"],
176
+ categories: ["any"],
177
+ multiple: true,
178
+ maxFiles: 20,
179
+ };
180
+ }
181
+ }
182
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/picker/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * @rajeev02/document — Signature
3
+ * Digital signature: draw, type, upload, place on documents, stamp, legal timestamp
4
+ */
5
+ export type SignatureType = "drawn" | "typed" | "uploaded" | "aadhaar_esign";
6
+ export interface SignatureData {
7
+ id: string;
8
+ type: SignatureType;
9
+ /** Base64 image of signature */
10
+ imageBase64: string;
11
+ /** For typed signatures */
12
+ text?: string;
13
+ fontFamily?: string;
14
+ /** Color of signature */
15
+ color: string;
16
+ /** When created */
17
+ createdAt: number;
18
+ /** Whether this is the default signature */
19
+ isDefault: boolean;
20
+ }
21
+ export interface SignaturePlacement {
22
+ signatureId: string;
23
+ pageNumber: number;
24
+ position: {
25
+ x: number;
26
+ y: number;
27
+ };
28
+ size: {
29
+ width: number;
30
+ height: number;
31
+ };
32
+ rotation: number;
33
+ /** Legal timestamp */
34
+ timestamp: number;
35
+ /** Signer name */
36
+ signerName?: string;
37
+ /** Signer email */
38
+ signerEmail?: string;
39
+ /** IP address at time of signing */
40
+ ipAddress?: string;
41
+ /** Reason for signing */
42
+ reason?: string;
43
+ }
44
+ export interface SignatureConfig {
45
+ /** Canvas width for drawn signatures */
46
+ canvasWidth: number;
47
+ /** Canvas height */
48
+ canvasHeight: number;
49
+ /** Default pen color */
50
+ penColor: string;
51
+ /** Pen thickness */
52
+ penThickness: number;
53
+ /** Available pen colors */
54
+ availableColors: string[];
55
+ /** Available fonts for typed signatures */
56
+ availableFonts: string[];
57
+ /** Whether to include timestamp overlay */
58
+ includeTimestamp: boolean;
59
+ /** Whether to require reason for signing */
60
+ requireReason: boolean;
61
+ }
62
+ /**
63
+ * Signature Manager — manages saved signatures and placement
64
+ */
65
+ export declare class SignatureManager {
66
+ private signatures;
67
+ private placements;
68
+ private config;
69
+ constructor(config?: Partial<SignatureConfig>);
70
+ /** Save a drawn signature */
71
+ saveDrawnSignature(imageBase64: string, color?: string): string;
72
+ /** Save a typed signature */
73
+ saveTypedSignature(text: string, fontFamily: string, color?: string): string;
74
+ /** Save an uploaded signature image */
75
+ saveUploadedSignature(imageBase64: string): string;
76
+ /** Delete a saved signature */
77
+ deleteSignature(id: string): boolean;
78
+ /** Set default signature */
79
+ setDefault(id: string): void;
80
+ /** Get default signature */
81
+ getDefault(): SignatureData | null;
82
+ /** Get all saved signatures */
83
+ getAllSignatures(): SignatureData[];
84
+ /** Place signature on a document */
85
+ placeSignature(placement: Omit<SignaturePlacement, "timestamp">): void;
86
+ /** Get all placements */
87
+ getPlacements(): SignaturePlacement[];
88
+ /** Get placements for a specific page */
89
+ getPagePlacements(pageNumber: number): SignaturePlacement[];
90
+ /** Remove a placement */
91
+ removePlacement(index: number): void;
92
+ /** Generate signing certificate data (for legal compliance) */
93
+ generateSigningRecord(signerName: string, signerEmail: string, reason: string, documentHash: string): Record<string, unknown>;
94
+ getConfig(): SignatureConfig;
95
+ }
96
+ /** Default signature placement sizes */
97
+ export declare function getSignatureSizePresets(): {
98
+ id: string;
99
+ label: string;
100
+ width: number;
101
+ height: number;
102
+ }[];
103
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/signature/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ /**
3
+ * @rajeev02/document — Signature
4
+ * Digital signature: draw, type, upload, place on documents, stamp, legal timestamp
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.SignatureManager = void 0;
8
+ exports.getSignatureSizePresets = getSignatureSizePresets;
9
+ /**
10
+ * Signature Manager — manages saved signatures and placement
11
+ */
12
+ class SignatureManager {
13
+ constructor(config) {
14
+ this.signatures = new Map();
15
+ this.placements = [];
16
+ this.config = {
17
+ canvasWidth: 600,
18
+ canvasHeight: 200,
19
+ penColor: "#000000",
20
+ penThickness: 3,
21
+ availableColors: ["#000000", "#1E3A5F", "#8B0000", "#006400"],
22
+ availableFonts: [
23
+ "Dancing Script",
24
+ "Great Vibes",
25
+ "Allura",
26
+ "Sacramento",
27
+ "Alex Brush",
28
+ "Pacifico",
29
+ ],
30
+ includeTimestamp: true,
31
+ requireReason: false,
32
+ ...config,
33
+ };
34
+ }
35
+ /** Save a drawn signature */
36
+ saveDrawnSignature(imageBase64, color = "#000000") {
37
+ const id = `sig_${Date.now()}`;
38
+ const sig = {
39
+ id,
40
+ type: "drawn",
41
+ imageBase64,
42
+ color,
43
+ createdAt: Date.now(),
44
+ isDefault: this.signatures.size === 0,
45
+ };
46
+ this.signatures.set(id, sig);
47
+ return id;
48
+ }
49
+ /** Save a typed signature */
50
+ saveTypedSignature(text, fontFamily, color = "#000000") {
51
+ const id = `sig_${Date.now()}`;
52
+ const sig = {
53
+ id,
54
+ type: "typed",
55
+ imageBase64: "",
56
+ text,
57
+ fontFamily,
58
+ color,
59
+ createdAt: Date.now(),
60
+ isDefault: this.signatures.size === 0,
61
+ };
62
+ this.signatures.set(id, sig);
63
+ return id;
64
+ }
65
+ /** Save an uploaded signature image */
66
+ saveUploadedSignature(imageBase64) {
67
+ const id = `sig_${Date.now()}`;
68
+ const sig = {
69
+ id,
70
+ type: "uploaded",
71
+ imageBase64,
72
+ color: "#000000",
73
+ createdAt: Date.now(),
74
+ isDefault: this.signatures.size === 0,
75
+ };
76
+ this.signatures.set(id, sig);
77
+ return id;
78
+ }
79
+ /** Delete a saved signature */
80
+ deleteSignature(id) {
81
+ return this.signatures.delete(id);
82
+ }
83
+ /** Set default signature */
84
+ setDefault(id) {
85
+ for (const sig of this.signatures.values())
86
+ sig.isDefault = false;
87
+ const sig = this.signatures.get(id);
88
+ if (sig)
89
+ sig.isDefault = true;
90
+ }
91
+ /** Get default signature */
92
+ getDefault() {
93
+ return (Array.from(this.signatures.values()).find((s) => s.isDefault) ?? null);
94
+ }
95
+ /** Get all saved signatures */
96
+ getAllSignatures() {
97
+ return Array.from(this.signatures.values());
98
+ }
99
+ /** Place signature on a document */
100
+ placeSignature(placement) {
101
+ this.placements.push({ ...placement, timestamp: Date.now() });
102
+ }
103
+ /** Get all placements */
104
+ getPlacements() {
105
+ return [...this.placements];
106
+ }
107
+ /** Get placements for a specific page */
108
+ getPagePlacements(pageNumber) {
109
+ return this.placements.filter((p) => p.pageNumber === pageNumber);
110
+ }
111
+ /** Remove a placement */
112
+ removePlacement(index) {
113
+ this.placements.splice(index, 1);
114
+ }
115
+ /** Generate signing certificate data (for legal compliance) */
116
+ generateSigningRecord(signerName, signerEmail, reason, documentHash) {
117
+ return {
118
+ signerName,
119
+ signerEmail,
120
+ reason,
121
+ documentHash,
122
+ signedAt: new Date().toISOString(),
123
+ signatureCount: this.placements.length,
124
+ placements: this.placements.map((p) => ({
125
+ page: p.pageNumber,
126
+ x: p.position.x,
127
+ y: p.position.y,
128
+ timestamp: p.timestamp,
129
+ })),
130
+ certificateVersion: "1.0",
131
+ };
132
+ }
133
+ getConfig() {
134
+ return { ...this.config };
135
+ }
136
+ }
137
+ exports.SignatureManager = SignatureManager;
138
+ /** Default signature placement sizes */
139
+ function getSignatureSizePresets() {
140
+ return [
141
+ { id: "small", label: "Small", width: 0.15, height: 0.04 },
142
+ { id: "medium", label: "Medium", width: 0.25, height: 0.06 },
143
+ { id: "large", label: "Large", width: 0.35, height: 0.08 },
144
+ { id: "full_width", label: "Full Width", width: 0.5, height: 0.1 },
145
+ ];
146
+ }
147
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/signature/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@rajeev02/document",
3
+ "version": "0.1.0",
4
+ "description": "Document picker, PDF viewer/editor, annotation, digital signature, form filling, document scanner",
5
+ "main": "lib/index.js",
6
+ "author": "Rajeev Kumar Joshi <rajeevjoshi91@gmail.com> (https://rajeev02.github.io)",
7
+ "license": "MIT",
8
+ "types": "lib/index.d.ts",
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "clean": "rm -rf lib",
12
+ "prepublishOnly": "npm run build"
13
+ },
14
+ "keywords": [
15
+ "react-native",
16
+ "document",
17
+ "pdf",
18
+ "scanner",
19
+ "ocr",
20
+ "signature"
21
+ ],
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "https://github.com/Rajeev02/rajeev-sdk",
25
+ "directory": "packages/document"
26
+ },
27
+ "homepage": "https://github.com/Rajeev02/rajeev-sdk#readme",
28
+ "bugs": {
29
+ "url": "https://github.com/Rajeev02/rajeev-sdk/issues"
30
+ },
31
+ "files": [
32
+ "lib/",
33
+ "src/",
34
+ "README.md"
35
+ ],
36
+ "publishConfig": {
37
+ "access": "public"
38
+ },
39
+ "peerDependencies": {
40
+ "react": ">=18.3.0",
41
+ "react-native": ">=0.84.0"
42
+ },
43
+ "peerDependenciesMeta": {
44
+ "react-native": {
45
+ "optional": true
46
+ }
47
+ },
48
+ "devDependencies": {
49
+ "@types/react": "^19.0.0",
50
+ "typescript": "^5.4.0"
51
+ }
52
+ }