@operato/scene-pdf 9.0.1 → 10.0.0-beta.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.
@@ -1,5 +1,241 @@
1
- import { Properties, Shape } from '@hatiolab/things-scene';
2
- declare const PDFPage_base: typeof Shape;
1
+ import { Component, Properties, Shape } from '@hatiolab/things-scene';
2
+ declare const PDFPage_base: (new (...args: any[]) => {
3
+ contains(x: number, y: number): boolean;
4
+ get path(): {
5
+ x: any;
6
+ y: any;
7
+ }[];
8
+ set path(path: {
9
+ x: any;
10
+ y: any;
11
+ }[]): any;
12
+ get anchors(): {
13
+ name: string;
14
+ position: {
15
+ x: any;
16
+ y: any;
17
+ };
18
+ }[];
19
+ get bounds(): any;
20
+ set bounds(bounds: any): any;
21
+ render(ctx: CanvasRenderingContext2D): void;
22
+ _app: any;
23
+ _model: any;
24
+ _state: any;
25
+ _delta: any;
26
+ _animation: any;
27
+ _animate: any;
28
+ _parent: any;
29
+ _disposed: any;
30
+ _textHidden: any;
31
+ _text_substitutor: any;
32
+ _value_substitutor: any;
33
+ _mappings: any;
34
+ _realObject: import("@hatiolab/things-scene").IRealObject | undefined;
35
+ _cachedState: any;
36
+ updatedAt: any;
37
+ fontSize: any;
38
+ __cache__: any;
39
+ created(): void;
40
+ added(parent: any): void;
41
+ removed(parent: any): void;
42
+ ready(): Promise<void>;
43
+ touch(): void;
44
+ clearCache(...attrs: any[]): void;
45
+ removeSelf(completely: any): void;
46
+ resetAnimation(): void;
47
+ dispose(): void;
48
+ get nature(): import("@hatiolab/things-scene").ComponentNature;
49
+ get disposed(): boolean;
50
+ isLayer(): boolean;
51
+ isGroup(): boolean;
52
+ isContainer(): this is import("@hatiolab/things-scene/dist-types/types/component").Container;
53
+ isLine(): boolean;
54
+ isRoot(): boolean;
55
+ isRootModel(): boolean;
56
+ is3dish(): boolean;
57
+ get is3dMode(): boolean;
58
+ isIn3DSpace(): boolean;
59
+ isTemplate(): boolean;
60
+ isHTMLElement(): boolean;
61
+ isConnectable(): boolean;
62
+ isIdentifiable(): boolean;
63
+ isPositionable(): boolean;
64
+ replaceRefids(replaceMap: any): void;
65
+ get(property: any): any;
66
+ set(props: any, propval?: any): any;
67
+ getState(property: any): any;
68
+ setState(props: any, propval?: any): any;
69
+ get model(): any;
70
+ get state(): any;
71
+ get hierarchy(): any;
72
+ get volatile(): never[];
73
+ _applyProps(target: any, props: any, options: any): any;
74
+ move(offset: {
75
+ x: number;
76
+ y: number;
77
+ }, ...args: boolean[]): void;
78
+ symmetryX(x?: number): void;
79
+ symmetryY(y: number): void;
80
+ adjustResize(bounds: import("@hatiolab/things-scene").BOUNDS, origin_bounds: import("@hatiolab/things-scene").BOUNDS, diagonal: boolean): {
81
+ left: any;
82
+ top: any;
83
+ width: any;
84
+ height: any;
85
+ };
86
+ adjustRotation(rotation: number, step: boolean): number;
87
+ outline(progress: number): any;
88
+ get center(): import("@hatiolab/things-scene").POINT;
89
+ set center(p: import("@hatiolab/things-scene").POINT): any;
90
+ get location(): import("@hatiolab/things-scene").POINT;
91
+ set location(l: import("@hatiolab/things-scene").POINT): any;
92
+ get rotate(): import("@hatiolab/things-scene").POINT;
93
+ set rotate(r: import("@hatiolab/things-scene").POINT): any;
94
+ get dimension(): import("@hatiolab/things-scene").DIMENSION;
95
+ set dimension(d: import("@hatiolab/things-scene").DIMENSION): any;
96
+ get drawPath(): import("@hatiolab/things-scene").POINT[];
97
+ get rotatePoint(): import("@hatiolab/things-scene").POINT;
98
+ get mutable(): boolean;
99
+ get resizable(): boolean;
100
+ get rotatable(): boolean;
101
+ buildRealObject(): import("@hatiolab/things-scene").IRealObject | undefined;
102
+ get realObject(): import("@hatiolab/things-scene").IRealObject | undefined;
103
+ draw(context?: import("@hatiolab/things-scene").SceneRenderContext): void;
104
+ prerender(context: import("@hatiolab/things-scene").SceneRenderContext): void;
105
+ postrender(context: import("@hatiolab/things-scene").SceneRenderContext): void;
106
+ prepare(resolve: (component: Component) => void, reject: (reason: any) => void): void;
107
+ prepareIf(condition: boolean): void;
108
+ drawText(context: import("@hatiolab/things-scene").SceneRenderContext): void;
109
+ drawStroke(context: import("@hatiolab/things-scene").SceneRenderContext, override?: Record<string, unknown>): void;
110
+ drawFill(context: import("@hatiolab/things-scene").SceneRenderContext, override?: Record<string, unknown>): void;
111
+ get strokeStyle(): any;
112
+ set strokeStyle(v: any): any;
113
+ get fillStyle(): any;
114
+ set fillStyle(v: any): any;
115
+ get fontColor(): string;
116
+ set fontColor(v: string): any;
117
+ get rotation(): number;
118
+ set rotation(v: number): any;
119
+ get decorators(): string[];
120
+ get decotag(): string;
121
+ get hidden(): boolean;
122
+ set hidden(v: boolean): any;
123
+ get tag(): string;
124
+ set tag(v: string): any;
125
+ get appendum(): any;
126
+ set appendum(v: any): any;
127
+ defaultTextSubstitutor(): string;
128
+ textLines(context?: import("@hatiolab/things-scene").SceneRenderContext): any[][];
129
+ get font(): string;
130
+ get lineHeight(): number;
131
+ get textSubstitutor(): () => string;
132
+ get text(): string;
133
+ set text(v: string): any;
134
+ get textBounds(): import("@hatiolab/things-scene").BOUNDS;
135
+ get textRotation(): number;
136
+ get textHidden(): boolean;
137
+ set textHidden(v: boolean): any;
138
+ get hasTextProperty(): boolean;
139
+ animate(opts: import("@hatiolab/things-scene").AnimationConfig): any;
140
+ effect(context: import("@hatiolab/things-scene").SceneRenderContext, model: any): void;
141
+ serialize(...others: any[]): string;
142
+ trim(): void;
143
+ closeScene(data: any): void;
144
+ delta(attr?: string | object, value?: any): any;
145
+ invalidate(): void;
146
+ get value(): any;
147
+ set value(v: any): any;
148
+ get data(): any;
149
+ set data(v: any): any;
150
+ set tap(v: any): any;
151
+ get mappings(): any[];
152
+ get retention(): number;
153
+ get animation(): import("@hatiolab/things-scene").AnimationController | undefined;
154
+ get started(): boolean;
155
+ set started(v: boolean): any;
156
+ get controls(): import("@hatiolab/things-scene").Control[] | undefined;
157
+ findFirst(finder: string | ((c: Component) => boolean), ...others: any[]): Component | undefined;
158
+ findAll(s: string | ((c: Component) => boolean), ...others: any[]): any[] | undefined;
159
+ capture(x: number, y: number, except?: (c: Component) => boolean): any;
160
+ findAnchor(name: string): any;
161
+ isDescendible(container: Component): boolean;
162
+ getContext(component?: unknown): any;
163
+ get root(): Component;
164
+ get rootModel(): Component;
165
+ get parent(): Component;
166
+ set parent(v: Component): any;
167
+ get scalable(): boolean;
168
+ get stuck(): boolean;
169
+ get capturable(): boolean;
170
+ get position(): string;
171
+ get origin(): string;
172
+ get offset(): import("@hatiolab/things-scene").POINT;
173
+ get app(): import("@hatiolab/things-scene").ApplicationContext;
174
+ drawEffect(context: import("@hatiolab/things-scene").SceneRenderContext): void;
175
+ prepareFill(resolve: Function, reject: Function): void;
176
+ prepareFillIf(condition: boolean): void;
177
+ onchangeFill(after: Record<string, any>, before: Record<string, any>): void;
178
+ drawImage(context: import("@hatiolab/things-scene").SceneRenderContext, image: HTMLImageElement, left: number, top: number, width: number, height: number): void;
179
+ mutateBounds(logic: ((bounds: import("@hatiolab/things-scene").BOUNDS) => import("@hatiolab/things-scene").BOUNDS | void) | null, context?: any): void;
180
+ mutatePath(beforeLogic: ((path: import("@hatiolab/things-scene").POINT[]) => import("@hatiolab/things-scene").POINT[] | void) | null, afterLogic: ((path: import("@hatiolab/things-scene").POINT[]) => import("@hatiolab/things-scene").POINT[] | void) | null, context?: any): void;
181
+ access(accessor: string): any;
182
+ substitute(template: string, data: any): string | undefined;
183
+ onchangeMappings(after: Record<string, any>, before: Record<string, any>): void;
184
+ onchangeData(after: Record<string, any>, before: Record<string, any>): void;
185
+ buildMappings(): void;
186
+ executeMappings(force?: boolean): void;
187
+ disposeMappings(): void;
188
+ ondropfile(transfered: FileList, files: string[]): void;
189
+ transcoordS2P(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
190
+ transcoordP2S(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
191
+ transcoordS2T(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
192
+ transcoordT2P(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
193
+ transcoordT2S(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
194
+ transcoordS2TR(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
195
+ transcoordS2O(x: number, y: number, target: Component): import("@hatiolab/things-scene").POINT;
196
+ transcoordC2S(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
197
+ transcoordS2C(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
198
+ toParent(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
199
+ fromParent(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
200
+ toScene(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
201
+ fromScene(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
202
+ toLocal(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
203
+ toGlobal(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
204
+ toOther(x: number, y: number, target: Component): import("@hatiolab/things-scene").POINT;
205
+ on(name: string | object, callback: Function, context?: any): any;
206
+ off(name?: string | object, callback?: Function, context?: any): any;
207
+ once(name: string | object, callback: Function, context?: any): any;
208
+ trigger(name: string, ...args: any[]): any;
209
+ delegate_on(delegator: any): any;
210
+ delegate_off(delegator: any): any;
211
+ onchange(after: Record<string, any>, before: Record<string, any>): void;
212
+ calculateBounds?(): void;
213
+ oncreate_element?(element: HTMLElement): void;
214
+ removeComponent(component: Component, ghost?: boolean): void;
215
+ addComponent(component: Component, ghost?: boolean): void;
216
+ insertComponentAt(component: Component, index: number, ghost?: boolean): void;
217
+ getOverlay(component: Component): HTMLElement | undefined;
218
+ findById(id: string): Component | undefined;
219
+ findByRefid(ref: string | number): Component | undefined;
220
+ findAllById(id: string): Component[];
221
+ resize(): void;
222
+ fit(type?: string): void;
223
+ get components(): Component[] | undefined;
224
+ get layout(): any;
225
+ get auxOverlay(): HTMLElement | undefined;
226
+ get isReady(): boolean;
227
+ get unitScale(): number;
228
+ get selected(): Component[];
229
+ set selected(_v: Component[]): any;
230
+ get focused(): Component | null;
231
+ set focused(_v: Component | null): any;
232
+ get hasSameParentForAllSelected(): boolean;
233
+ set hasSameParentForAllSelected(_v: boolean): any;
234
+ get fitMode(): string | undefined;
235
+ set fitMode(_v: string | undefined): any;
236
+ get element(): HTMLElement | null;
237
+ set element(_v: HTMLElement | null): any;
238
+ }) & typeof Shape;
3
239
  export default class PDFPage extends PDFPage_base {
4
240
  private scaleIndex;
5
241
  private displayScale;
package/dist/pdf-page.js CHANGED
@@ -43,19 +43,16 @@ const NATURE = {
43
43
  const SCALE_LEVELS = [2, 4, 8, 16, 32];
44
44
  const MAX_CANVAS_SIZE = 16000;
45
45
  let PDFPage = class PDFPage extends RectPath(Shape) {
46
- constructor() {
47
- super(...arguments);
48
- this.scaleIndex = 0;
49
- this.displayScale = 1;
50
- this.offsetX = 0;
51
- this.offsetY = 0;
52
- this.pdfDoc = null;
53
- this.canvas = document.createElement('canvas');
54
- this.renderTask = null;
55
- this.page = null;
56
- this.documentSize = null;
57
- this.pos = { x: 0, y: 0 };
58
- }
46
+ scaleIndex = 0;
47
+ displayScale = 1;
48
+ offsetX = 0;
49
+ offsetY = 0;
50
+ pdfDoc = null;
51
+ canvas = document.createElement('canvas');
52
+ renderTask = null;
53
+ page = null;
54
+ documentSize = null;
55
+ pos = { x: 0, y: 0 };
59
56
  async ready() {
60
57
  this.loadPDF();
61
58
  }
@@ -195,7 +192,6 @@ let PDFPage = class PDFPage extends RectPath(Shape) {
195
192
  }
196
193
  }
197
194
  render(ctx) {
198
- var _a, _b;
199
195
  super.render(ctx);
200
196
  if (!this.canvas) {
201
197
  return;
@@ -203,7 +199,7 @@ let PDFPage = class PDFPage extends RectPath(Shape) {
203
199
  const { left, top } = this.bounds;
204
200
  const { width, height } = this.canvas;
205
201
  ctx.clip();
206
- ctx.drawImage(this.canvas, left + this.offsetX, top + this.offsetY, (((_a = this.documentSize) === null || _a === void 0 ? void 0 : _a.width) || width) * this.displayScale, (((_b = this.documentSize) === null || _b === void 0 ? void 0 : _b.height) || height) * this.displayScale);
202
+ ctx.drawImage(this.canvas, left + this.offsetX, top + this.offsetY, (this.documentSize?.width || width) * this.displayScale, (this.documentSize?.height || height) * this.displayScale);
207
203
  }
208
204
  onwheel(e) {
209
205
  e.preventDefault();
@@ -1 +1 @@
1
- {"version":3,"file":"pdf-page.js","sourceRoot":"","sources":["../src/pdf-page.ts"],"names":[],"mappings":"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","sourcesContent":["import { getDocument, GlobalWorkerOptions, PageViewport, PDFDocumentProxy, PDFPageProxy, RenderTask } from 'pdfjs-dist'\nimport { Component, Properties, RectPath, Shape, sceneComponent } from '@hatiolab/things-scene'\n\nGlobalWorkerOptions.workerSrc = '/node_modules/pdfjs-dist/build/pdf.worker.min.mjs'\n\nconst NATURE = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'number',\n label: 'round',\n name: 'round',\n property: { min: 0 }\n },\n {\n type: 'attachment-selector',\n label: 'pdf-file',\n name: 'file',\n property: {\n displayField: 'fullpath',\n displayFullUrl: true,\n storageFilters: { type: Array, value: [{ name: 'category', value: 'application' }] },\n useUpload: true\n }\n },\n {\n type: 'number',\n label: 'pdf-page',\n name: 'page'\n },\n {\n type: 'select',\n label: 'pdf-fit',\n name: 'fit',\n property: {\n options: ['none', 'ratio', 'width', 'height']\n }\n }\n ],\n help: 'scene/component/pdf-viewer'\n}\n\nconst SCALE_LEVELS = [2, 4, 8, 16, 32]\nconst MAX_CANVAS_SIZE = 16000\n\n@sceneComponent('pdf-page')\nexport default class PDFPage extends RectPath(Shape) {\n private scaleIndex: number = 0\n private displayScale: number = 1\n private offsetX: number = 0\n private offsetY: number = 0\n private pdfDoc: PDFDocumentProxy | null = null\n private canvas: HTMLCanvasElement | null = document.createElement('canvas')\n private renderTask: RenderTask | null = null\n private page: PDFPageProxy | null = null\n private documentSize: PageViewport | null = null\n private pos: { x: number; y: number } = { x: 0, y: 0 }\n\n async ready() {\n this.loadPDF()\n }\n\n dispose() {\n super.dispose()\n\n if (this.renderTask) {\n this.renderTask.cancel()\n }\n this.pdfDoc = null\n this.canvas = null\n }\n\n async loadPDF() {\n const { file, page: pageNo = 1 } = this.state\n if (!file) return\n\n try {\n console.log(`📌 Loading PDF: ${file}`)\n this.pdfDoc = await getDocument(file).promise\n\n const numPages = this.pdfDoc.numPages\n this.page = await this.pdfDoc.getPage(pageNo > numPages ? 1 : pageNo)\n this.documentSize = this.page.getViewport({ scale: 1 })\n\n this.fit()\n } catch (error) {\n console.error('🚨 Failed to load PDF:', error)\n }\n }\n\n onchange(after: Properties, before: Properties) {\n if ('file' in after || 'fit' in after || 'page' in after) {\n this.loadPDF()\n }\n }\n\n /**\n * Adjusts the PDF display scale and offsets based on the fit mode.\n *\n * @async\n * @method fit\n * @memberof PdfPage\n * @returns {Promise<void>}\n *\n * @description\n * This method adjusts the display scale of the PDF page based on the `fit` mode specified in the component's state.\n * It supports the following fit modes:\n * - 'width': Scales the PDF to fit the width of the container.\n * - 'height': Scales the PDF to fit the height of the container.\n * - 'ratio': Scales the PDF to fit both the width and height of the container while maintaining the aspect ratio.\n * - 'none': Displays the PDF at its original size.\n *\n * The method also calculates the appropriate offsets to center the PDF within the container when the fit mode is 'ratio'.\n * Finally, it triggers the rendering of the PDF.\n */\n async fit() {\n if (!this.documentSize) {\n return\n }\n\n const { fit = 'none' } = this.state\n const { width, height } = this.bounds\n const viewport = this.documentSize\n\n switch (fit) {\n case 'none':\n this.displayScale = 1\n break\n case 'width':\n this.displayScale = width / viewport.width\n break\n case 'height':\n this.displayScale = height / viewport.height\n break\n case 'ratio':\n this.displayScale = Math.min(width / viewport.width, height / viewport.height)\n break\n default:\n this.displayScale = 1\n }\n\n this.scaleIndex = SCALE_LEVELS.findIndex(level => this.displayScale <= level)\n if (this.scaleIndex === -1) {\n this.scaleIndex = SCALE_LEVELS.length - 1\n }\n\n if (fit === 'ratio') {\n this.offsetX = (width - viewport.width * this.displayScale) / 2\n this.offsetY = (height - viewport.height * this.displayScale) / 2\n } else {\n this.offsetX = 0\n this.offsetY = 0\n }\n\n this.renderPDF()\n }\n\n async renderPDF() {\n if (!this.pdfDoc || !this.page || !this.documentSize) {\n return\n }\n\n const { width, height } = this.documentSize\n\n let scale = SCALE_LEVELS[this.scaleIndex]\n\n let newWidth = Math.min(width * scale, MAX_CANVAS_SIZE)\n let newHeight = Math.min(height * scale, MAX_CANVAS_SIZE)\n\n if (newWidth === MAX_CANVAS_SIZE || newHeight === MAX_CANVAS_SIZE) {\n const ratio = width / height\n if (ratio > 1) {\n newHeight = newWidth / ratio\n }\n\n const recalcScale = newHeight / height\n\n this.scaleIndex = SCALE_LEVELS.findIndex(level => recalcScale <= level) - 1\n scale = SCALE_LEVELS[this.scaleIndex]\n\n newWidth = width * scale\n newHeight = height * scale\n }\n\n // Create an `offscreenCanvas` to render in the background while maintaining the existing display\n const offscreenCanvas = document.createElement('canvas')\n offscreenCanvas.width = newWidth\n offscreenCanvas.height = newHeight\n\n const renderContext = {\n canvasContext: offscreenCanvas.getContext('2d')!,\n viewport: this.page.getViewport({ scale })\n }\n\n if (this.renderTask) {\n this.renderTask.cancel()\n try {\n await this.renderTask.promise\n } catch (error) {\n console.warn('Previous render task was canceled.')\n }\n }\n\n this.renderTask = this.page.render(renderContext)\n\n try {\n await this.renderTask.promise\n\n // 🔹 Replace the existing canvas with the new canvas once rendering is complete\n this.canvas = offscreenCanvas\n this.renderTask = null\n\n this.invalidate()\n } catch (error) {\n if (error instanceof Error && error.name !== 'RenderingCancelledException') {\n console.error('Failed to render PDF:', error)\n }\n }\n }\n\n render(ctx: CanvasRenderingContext2D) {\n super.render(ctx)\n\n if (!this.canvas) {\n return\n }\n\n const { left, top } = this.bounds\n const { width, height } = this.canvas\n\n ctx.clip()\n ctx.drawImage(\n this.canvas,\n left + this.offsetX,\n top + this.offsetY,\n (this.documentSize?.width || width) * this.displayScale,\n (this.documentSize?.height || height) * this.displayScale\n )\n }\n\n onwheel(e: WheelEvent) {\n e.preventDefault()\n var { left, top } = this.bounds\n var { x, y } = this.transcoordC2S(e.offsetX, e.offsetY)\n x -= left\n y -= top\n\n const zoomIn = e.deltaY < 0\n const zoomFactor = zoomIn ? 1.05 : 0.95\n const oldScale = this.displayScale\n\n this.displayScale = Math.min(Math.max(0.5, this.displayScale * zoomFactor), SCALE_LEVELS[SCALE_LEVELS.length - 1])\n\n const scaleLevel = SCALE_LEVELS.findIndex(level => this.displayScale <= level)\n const newScaleIndex = scaleLevel === -1 ? SCALE_LEVELS.length - 1 : scaleLevel\n\n // Calculate zoom reference point (zoom in/out based on mouse pos)\n const scaleRatio = this.displayScale / oldScale\n this.offsetX = x - (x - this.offsetX) * scaleRatio\n this.offsetY = y - (y - this.offsetY) * scaleRatio\n\n this.invalidate()\n\n if (newScaleIndex !== this.scaleIndex) {\n this.scaleIndex = newScaleIndex\n this.renderPDF()\n }\n }\n\n ondragstart(e: MouseEvent) {\n this.pos = this.transcoordC2S(e.offsetX, e.offsetY)\n }\n\n ondragmove(e: MouseEvent) {\n var { x, y } = this.transcoordC2S(e.offsetX, e.offsetY)\n const dx = x - this.pos.x\n const dy = y - this.pos.y\n this.offsetX += dx\n this.offsetY += dy\n this.pos = { x, y }\n this.invalidate()\n }\n\n ondblclick(e: MouseEvent) {\n this.fit()\n }\n\n get nature() {\n return NATURE\n }\n}\n"]}
1
+ {"version":3,"file":"pdf-page.js","sourceRoot":"","sources":["../src/pdf-page.ts"],"names":[],"mappings":"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","sourcesContent":["import { getDocument, GlobalWorkerOptions, PageViewport, PDFDocumentProxy, PDFPageProxy, RenderTask } from 'pdfjs-dist'\nimport { Component, Properties, RectPath, Shape, sceneComponent } from '@hatiolab/things-scene'\n\nGlobalWorkerOptions.workerSrc = '/node_modules/pdfjs-dist/build/pdf.worker.min.mjs'\n\nconst NATURE = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'number',\n label: 'round',\n name: 'round',\n property: { min: 0 }\n },\n {\n type: 'attachment-selector',\n label: 'pdf-file',\n name: 'file',\n property: {\n displayField: 'fullpath',\n displayFullUrl: true,\n storageFilters: { type: Array, value: [{ name: 'category', value: 'application' }] },\n useUpload: true\n }\n },\n {\n type: 'number',\n label: 'pdf-page',\n name: 'page'\n },\n {\n type: 'select',\n label: 'pdf-fit',\n name: 'fit',\n property: {\n options: ['none', 'ratio', 'width', 'height']\n }\n }\n ],\n help: 'scene/component/pdf-viewer'\n}\n\nconst SCALE_LEVELS = [2, 4, 8, 16, 32]\nconst MAX_CANVAS_SIZE = 16000\n\n@sceneComponent('pdf-page')\nexport default class PDFPage extends RectPath(Shape) {\n private scaleIndex: number = 0\n private displayScale: number = 1\n private offsetX: number = 0\n private offsetY: number = 0\n private pdfDoc: PDFDocumentProxy | null = null\n private canvas: HTMLCanvasElement | null = document.createElement('canvas')\n private renderTask: RenderTask | null = null\n private page: PDFPageProxy | null = null\n private documentSize: PageViewport | null = null\n private pos: { x: number; y: number } = { x: 0, y: 0 }\n\n async ready() {\n this.loadPDF()\n }\n\n dispose() {\n super.dispose()\n\n if (this.renderTask) {\n this.renderTask.cancel()\n }\n this.pdfDoc = null\n this.canvas = null\n }\n\n async loadPDF() {\n const { file, page: pageNo = 1 } = this.state\n if (!file) return\n\n try {\n console.log(`📌 Loading PDF: ${file}`)\n this.pdfDoc = await getDocument(file).promise\n\n const numPages = this.pdfDoc.numPages\n this.page = await this.pdfDoc.getPage(pageNo > numPages ? 1 : pageNo)\n this.documentSize = this.page.getViewport({ scale: 1 })\n\n this.fit()\n } catch (error) {\n console.error('🚨 Failed to load PDF:', error)\n }\n }\n\n onchange(after: Properties, before: Properties) {\n if ('file' in after || 'fit' in after || 'page' in after) {\n this.loadPDF()\n }\n }\n\n /**\n * Adjusts the PDF display scale and offsets based on the fit mode.\n *\n * @async\n * @method fit\n * @memberof PdfPage\n * @returns {Promise<void>}\n *\n * @description\n * This method adjusts the display scale of the PDF page based on the `fit` mode specified in the component's state.\n * It supports the following fit modes:\n * - 'width': Scales the PDF to fit the width of the container.\n * - 'height': Scales the PDF to fit the height of the container.\n * - 'ratio': Scales the PDF to fit both the width and height of the container while maintaining the aspect ratio.\n * - 'none': Displays the PDF at its original size.\n *\n * The method also calculates the appropriate offsets to center the PDF within the container when the fit mode is 'ratio'.\n * Finally, it triggers the rendering of the PDF.\n */\n async fit() {\n if (!this.documentSize) {\n return\n }\n\n const { fit = 'none' } = this.state\n const { width, height } = this.bounds\n const viewport = this.documentSize\n\n switch (fit) {\n case 'none':\n this.displayScale = 1\n break\n case 'width':\n this.displayScale = width / viewport.width\n break\n case 'height':\n this.displayScale = height / viewport.height\n break\n case 'ratio':\n this.displayScale = Math.min(width / viewport.width, height / viewport.height)\n break\n default:\n this.displayScale = 1\n }\n\n this.scaleIndex = SCALE_LEVELS.findIndex(level => this.displayScale <= level)\n if (this.scaleIndex === -1) {\n this.scaleIndex = SCALE_LEVELS.length - 1\n }\n\n if (fit === 'ratio') {\n this.offsetX = (width - viewport.width * this.displayScale) / 2\n this.offsetY = (height - viewport.height * this.displayScale) / 2\n } else {\n this.offsetX = 0\n this.offsetY = 0\n }\n\n this.renderPDF()\n }\n\n async renderPDF() {\n if (!this.pdfDoc || !this.page || !this.documentSize) {\n return\n }\n\n const { width, height } = this.documentSize\n\n let scale = SCALE_LEVELS[this.scaleIndex]\n\n let newWidth = Math.min(width * scale, MAX_CANVAS_SIZE)\n let newHeight = Math.min(height * scale, MAX_CANVAS_SIZE)\n\n if (newWidth === MAX_CANVAS_SIZE || newHeight === MAX_CANVAS_SIZE) {\n const ratio = width / height\n if (ratio > 1) {\n newHeight = newWidth / ratio\n }\n\n const recalcScale = newHeight / height\n\n this.scaleIndex = SCALE_LEVELS.findIndex(level => recalcScale <= level) - 1\n scale = SCALE_LEVELS[this.scaleIndex]\n\n newWidth = width * scale\n newHeight = height * scale\n }\n\n // Create an `offscreenCanvas` to render in the background while maintaining the existing display\n const offscreenCanvas = document.createElement('canvas')\n offscreenCanvas.width = newWidth\n offscreenCanvas.height = newHeight\n\n const renderContext = {\n canvasContext: offscreenCanvas.getContext('2d')!,\n viewport: this.page.getViewport({ scale })\n }\n\n if (this.renderTask) {\n this.renderTask.cancel()\n try {\n await this.renderTask.promise\n } catch (error) {\n console.warn('Previous render task was canceled.')\n }\n }\n\n this.renderTask = this.page.render(renderContext)\n\n try {\n await this.renderTask.promise\n\n // 🔹 Replace the existing canvas with the new canvas once rendering is complete\n this.canvas = offscreenCanvas\n this.renderTask = null\n\n this.invalidate()\n } catch (error) {\n if (error instanceof Error && error.name !== 'RenderingCancelledException') {\n console.error('Failed to render PDF:', error)\n }\n }\n }\n\n render(ctx: CanvasRenderingContext2D) {\n super.render(ctx)\n\n if (!this.canvas) {\n return\n }\n\n const { left, top } = this.bounds\n const { width, height } = this.canvas\n\n ctx.clip()\n ctx.drawImage(\n this.canvas,\n left + this.offsetX,\n top + this.offsetY,\n (this.documentSize?.width || width) * this.displayScale,\n (this.documentSize?.height || height) * this.displayScale\n )\n }\n\n onwheel(e: WheelEvent) {\n e.preventDefault()\n var { left, top } = this.bounds\n var { x, y } = this.transcoordC2S(e.offsetX, e.offsetY)\n x -= left\n y -= top\n\n const zoomIn = e.deltaY < 0\n const zoomFactor = zoomIn ? 1.05 : 0.95\n const oldScale = this.displayScale\n\n this.displayScale = Math.min(Math.max(0.5, this.displayScale * zoomFactor), SCALE_LEVELS[SCALE_LEVELS.length - 1])\n\n const scaleLevel = SCALE_LEVELS.findIndex(level => this.displayScale <= level)\n const newScaleIndex = scaleLevel === -1 ? SCALE_LEVELS.length - 1 : scaleLevel\n\n // Calculate zoom reference point (zoom in/out based on mouse pos)\n const scaleRatio = this.displayScale / oldScale\n this.offsetX = x - (x - this.offsetX) * scaleRatio\n this.offsetY = y - (y - this.offsetY) * scaleRatio\n\n this.invalidate()\n\n if (newScaleIndex !== this.scaleIndex) {\n this.scaleIndex = newScaleIndex\n this.renderPDF()\n }\n }\n\n ondragstart(e: MouseEvent) {\n this.pos = this.transcoordC2S(e.offsetX, e.offsetY)\n }\n\n ondragmove(e: MouseEvent) {\n var { x, y } = this.transcoordC2S(e.offsetX, e.offsetY)\n const dx = x - this.pos.x\n const dy = y - this.pos.y\n this.offsetX += dx\n this.offsetY += dy\n this.pos = { x, y }\n this.invalidate()\n }\n\n ondblclick(e: MouseEvent) {\n this.fit()\n }\n\n get nature() {\n return NATURE\n }\n}\n"]}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@operato/scene-pdf",
3
3
  "description": "pdf component for operato-scene",
4
4
  "author": "heartyoh",
5
- "version": "9.0.1",
5
+ "version": "10.0.0-beta.1",
6
6
  "type": "module",
7
7
  "main": "dist/index.js",
8
8
  "module": "dist/index.js",
@@ -10,7 +10,7 @@
10
10
  "things-scene": true,
11
11
  "publishConfig": {
12
12
  "access": "public",
13
- "@oprato:registry": "https://registry.npmjs.org"
13
+ "@operato:registry": "https://registry.npmjs.org"
14
14
  },
15
15
  "repository": {
16
16
  "type": "git",
@@ -22,29 +22,29 @@
22
22
  "serve:dev": "npm run serve",
23
23
  "start": "tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wds\"",
24
24
  "build": "tsc",
25
- "prepublish": "tsc",
26
- "lint": "eslint --ext .ts,.html . --ignore-path .gitignore && prettier \"**/*.ts\" --check --ignore-path .gitignore",
27
- "format": "eslint --ext .ts,.html . --fix --ignore-path .gitignore && prettier \"**/*.ts\" --write --ignore-path .gitignore",
25
+ "prepublishOnly": "tsc",
26
+ "lint": "eslint src/ && prettier \"src/**/*.ts\" --check",
27
+ "format": "eslint src/ --fix && prettier \"src/**/*.ts\" --write",
28
28
  "migration": "things-factory-migration"
29
29
  },
30
30
  "dependencies": {
31
- "@hatiolab/things-scene": "^9.0.0",
31
+ "@hatiolab/things-scene": "^10.0.0-beta.1",
32
32
  "lit": "^3.1.2",
33
33
  "pdfjs-dist": "^4.10.38"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@hatiolab/prettier-config": "^1.0.0",
37
- "@things-factory/builder": "^9.0.0",
38
- "@things-factory/operato-board": "^9.0.0",
39
- "@typescript-eslint/eslint-plugin": "^4.33.0",
40
- "@typescript-eslint/parser": "^4.33.0",
37
+ "@things-factory/builder": "^10.0.0-beta.1",
38
+ "@things-factory/operato-board": "^10.0.0-beta.1",
39
+ "@typescript-eslint/eslint-plugin": "^8.0.0",
40
+ "@typescript-eslint/parser": "^8.0.0",
41
41
  "@web/dev-server": "^0.1.28",
42
42
  "concurrently": "^8.0.1",
43
43
  "eslint": "^9.18.0",
44
44
  "eslint-config-prettier": "^10.0.1",
45
45
  "husky": "^8.0.3",
46
- "lint-staged": "^13.2.2",
47
- "prettier": "^2.4.1",
46
+ "lint-staged": "^15.2.2",
47
+ "prettier": "^3.2.5",
48
48
  "tslib": "^2.3.1",
49
49
  "typescript": "^5.0.4"
50
50
  },
@@ -60,5 +60,5 @@
60
60
  "prettier --write"
61
61
  ]
62
62
  },
63
- "gitHead": "5c1850ff48a7c9b6aa133426e817b22032326143"
63
+ "gitHead": "bb127dd516b9e962fb2d0a24bc2d8c5e108f06fb"
64
64
  }