pdf-mapview 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 @@
1
+ {"version":3,"sources":["../../src/shared/coordinates.ts","../../src/shared/bytes.ts","../../src/shared/overlays.ts","../../src/shared/manifest.ts"],"names":["z"],"mappings":"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","file":"index.js","sourcesContent":["export interface NormalizedPoint {\n x: number;\n y: number;\n}\n\nexport interface NormalizedRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface PixelSize {\n width: number;\n height: number;\n}\n\nexport function clamp01(value: number): number {\n return Math.min(1, Math.max(0, value));\n}\n\nexport function clampNormalizedPoint(point: NormalizedPoint): NormalizedPoint {\n return {\n x: clamp01(point.x),\n y: clamp01(point.y),\n };\n}\n\nexport function clampNormalizedRect(rect: NormalizedRect): NormalizedRect {\n const x = clamp01(rect.x);\n const y = clamp01(rect.y);\n const width = Math.min(1 - x, Math.max(0, rect.width));\n const height = Math.min(1 - y, Math.max(0, rect.height));\n return { x, y, width, height };\n}\n\nexport function normalizedToPixels(point: NormalizedPoint, size: PixelSize): NormalizedPoint {\n return {\n x: point.x * size.width,\n y: point.y * size.height,\n };\n}\n\nexport function pixelsToNormalized(point: NormalizedPoint, size: PixelSize): NormalizedPoint {\n if (size.width <= 0 || size.height <= 0) {\n return { x: 0, y: 0 };\n }\n\n return {\n x: point.x / size.width,\n y: point.y / size.height,\n };\n}\n\nexport function rectCenter(rect: NormalizedRect): NormalizedPoint {\n return {\n x: rect.x + rect.width / 2,\n y: rect.y + rect.height / 2,\n };\n}\n\nexport function unionRects(rects: readonly NormalizedRect[]): NormalizedRect | null {\n if (rects.length === 0) {\n return null;\n }\n\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n let maxX = Number.NEGATIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n\n for (const rect of rects) {\n minX = Math.min(minX, rect.x);\n minY = Math.min(minY, rect.y);\n maxX = Math.max(maxX, rect.x + rect.width);\n maxY = Math.max(maxY, rect.y + rect.height);\n }\n\n return clampNormalizedRect({\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n });\n}\n","export function toUint8Array(input: Buffer | Uint8Array | ArrayBuffer): Uint8Array {\n if (input instanceof ArrayBuffer) {\n return new Uint8Array(input);\n }\n\n return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n}\n","import { z } from \"zod\";\n\nimport type { NormalizedPoint, NormalizedRect } from \"./coordinates\";\n\nexport type RegionGeometryType = \"polygon\" | \"rectangle\" | \"point\" | \"label\";\n\nexport interface PolygonGeometry {\n type: \"polygon\";\n points: NormalizedPoint[];\n}\n\nexport interface RectangleGeometry {\n type: \"rectangle\";\n rect: NormalizedRect;\n}\n\nexport interface PointGeometry {\n type: \"point\";\n point: NormalizedPoint;\n radius?: number;\n}\n\nexport interface LabelGeometry {\n type: \"label\";\n point: NormalizedPoint;\n text: string;\n}\n\nexport type RegionGeometry =\n | PolygonGeometry\n | RectangleGeometry\n | PointGeometry\n | LabelGeometry;\n\nexport interface RegionFeature<Metadata = Record<string, unknown>> {\n id: string;\n geometry: RegionGeometry;\n label?: string;\n metadata?: Metadata;\n}\n\nexport interface RegionCollection<Metadata = Record<string, unknown>> {\n type: \"FeatureCollection\";\n regions: RegionFeature<Metadata>[];\n}\n\nconst normalizedPointSchema = z.object({\n x: z.number().finite().min(0).max(1),\n y: z.number().finite().min(0).max(1),\n});\n\nconst normalizedRectSchema = z.object({\n x: z.number().finite().min(0).max(1),\n y: z.number().finite().min(0).max(1),\n width: z.number().finite().min(0).max(1),\n height: z.number().finite().min(0).max(1),\n});\n\nexport const regionFeatureSchema = z.object({\n id: z.string().min(1),\n geometry: z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"polygon\"),\n points: z.array(normalizedPointSchema).min(3),\n }),\n z.object({\n type: z.literal(\"rectangle\"),\n rect: normalizedRectSchema,\n }),\n z.object({\n type: z.literal(\"point\"),\n point: normalizedPointSchema,\n radius: z.number().finite().positive().optional(),\n }),\n z.object({\n type: z.literal(\"label\"),\n point: normalizedPointSchema,\n text: z.string().min(1),\n }),\n ]),\n label: z.string().optional(),\n metadata: z.record(z.unknown()).optional(),\n});\n\nexport const regionCollectionSchema = z.object({\n type: z.literal(\"FeatureCollection\"),\n regions: z.array(regionFeatureSchema),\n});\n\nexport function normalizeRegions(\n input?: RegionCollection | RegionFeature[] | null,\n): RegionFeature[] {\n if (!input) {\n return [];\n }\n\n if (Array.isArray(input)) {\n return input;\n }\n\n return input.regions;\n}\n","import { z } from \"zod\";\n\nimport { regionCollectionSchema } from \"./overlays\";\nimport type { RegionCollection } from \"./overlays\";\nimport type { TileFormat } from \"./ingest\";\n\nexport interface TileLevelManifest {\n z: number;\n width: number;\n height: number;\n columns: number;\n rows: number;\n scale: number;\n}\n\nexport interface PdfMapManifest {\n version: 1;\n kind: \"pdf-map\";\n id: string;\n source: {\n type: \"pdf\" | \"image\";\n originalFilename?: string;\n page?: number;\n width: number;\n height: number;\n mimeType?: string;\n };\n coordinateSpace: {\n normalized: true;\n width: number;\n height: number;\n };\n tiles: {\n tileSize: number;\n format: TileFormat;\n minZoom: number;\n maxZoom: number;\n pathTemplate: string;\n levels: TileLevelManifest[];\n };\n view: {\n defaultCenter: [number, number];\n defaultZoom: number;\n minZoom: number;\n maxZoom: number;\n };\n overlays?: {\n inline?: RegionCollection;\n url?: string;\n };\n assets?: {\n preview?: string;\n };\n metadata?: {\n title?: string;\n createdAt?: string;\n [key: string]: unknown;\n };\n}\n\nexport interface CreateManifestInput extends Omit<PdfMapManifest, \"version\" | \"kind\"> {}\n\nexport interface ResolveTileUrlArgs {\n manifest: PdfMapManifest;\n z: number;\n x: number;\n y: number;\n baseUrl?: string;\n overrideTemplate?: string;\n}\n\nconst tileLevelSchema = z.object({\n z: z.number().int().min(0),\n width: z.number().int().positive(),\n height: z.number().int().positive(),\n columns: z.number().int().positive(),\n rows: z.number().int().positive(),\n scale: z.number().positive(),\n});\n\nexport const manifestSchema: z.ZodType<PdfMapManifest> = z.object({\n version: z.literal(1),\n kind: z.literal(\"pdf-map\"),\n id: z.string().min(1),\n source: z.object({\n type: z.union([z.literal(\"pdf\"), z.literal(\"image\")]),\n originalFilename: z.string().optional(),\n page: z.number().int().positive().optional(),\n width: z.number().int().positive(),\n height: z.number().int().positive(),\n mimeType: z.string().optional(),\n }),\n coordinateSpace: z.object({\n normalized: z.literal(true),\n width: z.number().int().positive(),\n height: z.number().int().positive(),\n }),\n tiles: z.object({\n tileSize: z.number().int().positive(),\n format: z.union([z.literal(\"webp\"), z.literal(\"jpeg\"), z.literal(\"png\")]),\n minZoom: z.number().int().min(0),\n maxZoom: z.number().int().min(0),\n pathTemplate: z.string().min(1),\n levels: z.array(tileLevelSchema),\n }),\n view: z.object({\n defaultCenter: z.tuple([\n z.number().finite().min(0).max(1),\n z.number().finite().min(0).max(1),\n ]),\n defaultZoom: z.number().finite(),\n minZoom: z.number().finite(),\n maxZoom: z.number().finite(),\n }),\n overlays: z\n .object({\n inline: regionCollectionSchema.optional(),\n url: z.string().optional(),\n })\n .optional(),\n assets: z\n .object({\n preview: z.string().optional(),\n })\n .optional(),\n metadata: z\n .object({\n title: z.string().optional(),\n createdAt: z.string().optional(),\n })\n .catchall(z.unknown())\n .optional(),\n});\n\nexport function createManifest(input: CreateManifestInput): PdfMapManifest {\n return manifestSchema.parse({\n version: 1,\n kind: \"pdf-map\",\n ...input,\n });\n}\n\nexport function parseManifest(input: unknown): PdfMapManifest {\n return manifestSchema.parse(input);\n}\n\nexport function resolveTileUrl(args: ResolveTileUrlArgs): string {\n const template = args.overrideTemplate ?? args.manifest.tiles.pathTemplate;\n const relative = template\n .replaceAll(\"{z}\", String(args.z))\n .replaceAll(\"{x}\", String(args.x))\n .replaceAll(\"{y}\", String(args.y));\n\n if (/^https?:\\/\\//.test(relative)) {\n return relative;\n }\n\n if (!args.baseUrl) {\n return relative;\n }\n\n if (/^https?:\\/\\//.test(args.baseUrl)) {\n return new URL(relative.replace(/^\\//, \"\"), ensureTrailingSlash(args.baseUrl)).toString();\n }\n\n return joinRelativeUrl(args.baseUrl, relative);\n}\n\nfunction ensureTrailingSlash(value: string): string {\n return value.endsWith(\"/\") ? value : `${value}/`;\n}\n\nfunction joinRelativeUrl(baseUrl: string, path: string): string {\n const normalizedBase = ensureLeadingSlash(stripTrailingSlash(baseUrl));\n const normalizedPath = stripLeadingSlash(path);\n\n if (!normalizedPath) {\n return normalizedBase || \"/\";\n }\n\n return normalizedBase ? `${normalizedBase}/${normalizedPath}` : `/${normalizedPath}`;\n}\n\nfunction stripLeadingSlash(value: string): string {\n return value.replace(/^\\/+/, \"\");\n}\n\nfunction stripTrailingSlash(value: string): string {\n return value.replace(/\\/+$/, \"\");\n}\n\nfunction ensureLeadingSlash(value: string): string {\n if (!value) {\n return \"\";\n }\n return value.startsWith(\"/\") ? value : `/${value}`;\n}\n"]}
@@ -0,0 +1,60 @@
1
+ import { SyntheticEvent } from 'react';
2
+ import { N as NormalizedPoint, d as NormalizedRect, P as PdfMapManifest } from './ingest-sfbf6503.js';
3
+
4
+ interface MapViewState {
5
+ center: NormalizedPoint;
6
+ zoom: number;
7
+ minZoom: number;
8
+ maxZoom: number;
9
+ containerWidth: number;
10
+ containerHeight: number;
11
+ }
12
+ interface ViewTransitionOptions {
13
+ immediate?: boolean;
14
+ animationTime?: number;
15
+ }
16
+ interface ScreenPoint {
17
+ x: number;
18
+ y: number;
19
+ }
20
+ interface MapPointerEvent {
21
+ screenPoint: ScreenPoint;
22
+ normalizedPoint?: NormalizedPoint;
23
+ nativeEvent: Event | SyntheticEvent;
24
+ }
25
+ interface ViewportController {
26
+ getView(): MapViewState;
27
+ setView(view: Partial<MapViewState>, options?: ViewTransitionOptions): void;
28
+ fitToBounds(bounds?: NormalizedRect, options?: ViewTransitionOptions): void;
29
+ screenToNormalized(point: ScreenPoint): NormalizedPoint;
30
+ normalizedToScreen(point: NormalizedPoint): ScreenPoint;
31
+ }
32
+
33
+ interface GetTileUrlArgs {
34
+ manifest: PdfMapManifest;
35
+ z: number;
36
+ x: number;
37
+ y: number;
38
+ signal?: AbortSignal;
39
+ }
40
+ type GetTileUrl = (args: GetTileUrlArgs) => string | Promise<string>;
41
+ interface TilesSource {
42
+ type: "tiles";
43
+ manifest: PdfMapManifest;
44
+ baseUrl?: string;
45
+ getTileUrl?: GetTileUrl;
46
+ }
47
+ interface ImageSource {
48
+ type: "image";
49
+ src: string;
50
+ width: number;
51
+ height: number;
52
+ }
53
+ interface PdfSource {
54
+ type: "pdf";
55
+ file: string | Uint8Array | ArrayBuffer;
56
+ page?: number;
57
+ }
58
+ type PdfMapSource = TilesSource | ImageSource | PdfSource;
59
+
60
+ export type { GetTileUrl as G, ImageSource as I, MapPointerEvent as M, PdfMapSource as P, ScreenPoint as S, TilesSource as T, ViewTransitionOptions as V, GetTileUrlArgs as a, MapViewState as b, PdfSource as c, ViewportController as d };
@@ -0,0 +1,60 @@
1
+ import { SyntheticEvent } from 'react';
2
+ import { N as NormalizedPoint, d as NormalizedRect, P as PdfMapManifest } from './ingest-sfbf6503.cjs';
3
+
4
+ interface MapViewState {
5
+ center: NormalizedPoint;
6
+ zoom: number;
7
+ minZoom: number;
8
+ maxZoom: number;
9
+ containerWidth: number;
10
+ containerHeight: number;
11
+ }
12
+ interface ViewTransitionOptions {
13
+ immediate?: boolean;
14
+ animationTime?: number;
15
+ }
16
+ interface ScreenPoint {
17
+ x: number;
18
+ y: number;
19
+ }
20
+ interface MapPointerEvent {
21
+ screenPoint: ScreenPoint;
22
+ normalizedPoint?: NormalizedPoint;
23
+ nativeEvent: Event | SyntheticEvent;
24
+ }
25
+ interface ViewportController {
26
+ getView(): MapViewState;
27
+ setView(view: Partial<MapViewState>, options?: ViewTransitionOptions): void;
28
+ fitToBounds(bounds?: NormalizedRect, options?: ViewTransitionOptions): void;
29
+ screenToNormalized(point: ScreenPoint): NormalizedPoint;
30
+ normalizedToScreen(point: NormalizedPoint): ScreenPoint;
31
+ }
32
+
33
+ interface GetTileUrlArgs {
34
+ manifest: PdfMapManifest;
35
+ z: number;
36
+ x: number;
37
+ y: number;
38
+ signal?: AbortSignal;
39
+ }
40
+ type GetTileUrl = (args: GetTileUrlArgs) => string | Promise<string>;
41
+ interface TilesSource {
42
+ type: "tiles";
43
+ manifest: PdfMapManifest;
44
+ baseUrl?: string;
45
+ getTileUrl?: GetTileUrl;
46
+ }
47
+ interface ImageSource {
48
+ type: "image";
49
+ src: string;
50
+ width: number;
51
+ height: number;
52
+ }
53
+ interface PdfSource {
54
+ type: "pdf";
55
+ file: string | Uint8Array | ArrayBuffer;
56
+ page?: number;
57
+ }
58
+ type PdfMapSource = TilesSource | ImageSource | PdfSource;
59
+
60
+ export type { GetTileUrl as G, ImageSource as I, MapPointerEvent as M, PdfMapSource as P, ScreenPoint as S, TilesSource as T, ViewTransitionOptions as V, GetTileUrlArgs as a, MapViewState as b, PdfSource as c, ViewportController as d };
package/package.json ADDED
@@ -0,0 +1,104 @@
1
+ {
2
+ "name": "pdf-mapview",
3
+ "version": "0.1.0",
4
+ "description": "React viewer and ingest toolkit for map-like PDF, floorplan, and large image experiences.",
5
+ "keywords": [
6
+ "pdf",
7
+ "floorplan",
8
+ "tiles",
9
+ "deep-zoom",
10
+ "openseadragon",
11
+ "react",
12
+ "tanstack-start",
13
+ "vercel",
14
+ "ingest",
15
+ "viewer"
16
+ ],
17
+ "author": "JR Bussard",
18
+ "license": "0BSD",
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/pirut/pdf-mapview.git"
22
+ },
23
+ "homepage": "https://github.com/pirut/pdf-mapview#readme",
24
+ "bugs": {
25
+ "url": "https://github.com/pirut/pdf-mapview/issues"
26
+ },
27
+ "type": "module",
28
+ "sideEffects": false,
29
+ "engines": {
30
+ "node": ">=18.18.0"
31
+ },
32
+ "main": "./dist/shared/index.cjs",
33
+ "module": "./dist/shared/index.js",
34
+ "types": "./dist/shared/index.d.ts",
35
+ "bin": {
36
+ "pdf-mapview": "./dist/ingest/cli.cjs"
37
+ },
38
+ "files": [
39
+ "dist",
40
+ "README.md",
41
+ "LICENSE"
42
+ ],
43
+ "exports": {
44
+ ".": {
45
+ "types": "./dist/shared/index.d.ts",
46
+ "import": "./dist/shared/index.js",
47
+ "require": "./dist/shared/index.cjs"
48
+ },
49
+ "./client": {
50
+ "types": "./dist/client/index.d.ts",
51
+ "import": "./dist/client/index.js",
52
+ "require": "./dist/client/index.cjs"
53
+ },
54
+ "./ingest": {
55
+ "types": "./dist/ingest/index.d.ts",
56
+ "import": "./dist/ingest/index.js",
57
+ "require": "./dist/ingest/index.cjs"
58
+ },
59
+ "./server": {
60
+ "types": "./dist/server/index.d.ts",
61
+ "import": "./dist/server/index.js",
62
+ "require": "./dist/server/index.cjs"
63
+ },
64
+ "./package.json": "./package.json"
65
+ },
66
+ "peerDependenciesMeta": {
67
+ "react": {
68
+ "optional": true
69
+ },
70
+ "react-dom": {
71
+ "optional": true
72
+ }
73
+ },
74
+ "scripts": {
75
+ "build": "tsup",
76
+ "check": "tsc --noEmit",
77
+ "prepare": "npm run build",
78
+ "prepack": "npm run build",
79
+ "test": "vitest run",
80
+ "test:watch": "vitest",
81
+ "clean": "rm -rf dist coverage .vitest"
82
+ },
83
+ "peerDependencies": {
84
+ "react": "^18.3.0 || ^19.0.0",
85
+ "react-dom": "^18.3.0 || ^19.0.0"
86
+ },
87
+ "dependencies": {
88
+ "@napi-rs/canvas": "^0.1.67",
89
+ "cac": "^6.7.14",
90
+ "openseadragon": "^5.0.1",
91
+ "pdfjs-dist": "^4.10.38",
92
+ "sharp": "^0.34.4",
93
+ "zod": "^3.24.1"
94
+ },
95
+ "devDependencies": {
96
+ "@types/node": "^24.0.0",
97
+ "@types/react": "^19.1.0",
98
+ "@types/react-dom": "^19.1.0",
99
+ "pdf-lib": "^1.17.1",
100
+ "tsup": "^8.3.5",
101
+ "typescript": "^5.8.3",
102
+ "vitest": "^3.2.4"
103
+ }
104
+ }