canvu-react 0.3.24 → 0.3.25
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/index.cjs +49 -30
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.js +49 -31
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +105 -30
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +105 -30
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -5,6 +5,13 @@ export { a as ArrowBindings, b as VectorPathPoint, n as normalizeRect, r as rect
|
|
|
5
5
|
export { H as HydratedSceneItemsWithAssetsResult, h as hydrateSceneItemsWithAssets } from './asset-hydration-3Iv5xHxM.cjs';
|
|
6
6
|
export { D as DEFAULT_STROKE_STYLE, F as FreehandSvgPayload, S as StrokeStyle, a as applyStrokeToItem, b as buildArrowSvg, c as buildDrawDotSvg, d as buildEllipseSvg, e as buildFreehandPathSvg, f as buildLineSvg, g as buildRectSvg, h as computeFreehandSvgPayload, i as createDrawDotItem, j as createEllipseItem, k as createFreehandStrokeItem, l as createImageFromVectorTrace, m as createImageItem, n as createLineItem, o as createRectangleItem, p as createShapeId, q as createTextItem, r as lineEndpointsToLocal, s as rebuildItemSvg, t as resolveStrokeStyle } from './shape-builders-DFudWDFI.cjs';
|
|
7
7
|
|
|
8
|
+
type EncodeCanvasToBlobOptions = {
|
|
9
|
+
mimeType?: string;
|
|
10
|
+
quality?: number;
|
|
11
|
+
fallbackMimeTypes?: readonly string[];
|
|
12
|
+
};
|
|
13
|
+
declare function encodeCanvasToBlob(canvas: HTMLCanvasElement, options?: EncodeCanvasToBlobOptions): Promise<Blob>;
|
|
14
|
+
|
|
8
15
|
/**
|
|
9
16
|
* Embeds the bitmap as a single SVG `<image>` (data URL or blob URL) instead of tracing paths.
|
|
10
17
|
* Avoids huge path counts and keeps screenshots/photos sharp.
|
|
@@ -310,4 +317,4 @@ declare const DEFAULT_TEXT_FONT_SIZE = 18;
|
|
|
310
317
|
*/
|
|
311
318
|
declare function buildTextSvg(content: string, _width: number, _height: number, fillColor?: string, fontSize?: number): string;
|
|
312
319
|
|
|
313
|
-
export { ARROW_BIND_SNAP_PX, type ApplePencilNavOptions, ArrowEndpointBinding, Camera2D, type CreateCustomShapeContent, type CustomShapeSize, DEFAULT_TEXT_FONT_SIZE, type LoadRasterImageFileOptions, MANAGED_KEY, MAX_RASTER_EMBED_DIMENSION, type RasterEmbedMode, type RasterSceneSource, Rect, SvgVectorRenderer, type SvgVectorRendererOptions, VectorScene, VectorSceneItem, type ViewportInputOptions, addManagedImage, attachApplePencilNavigation, attachViewportInput, bakeArrowItemToAbsolute, buildCustomShapeChildrenSvg, buildTextSvg, cloneVectorSceneItemWithNewId, cloneVectorSceneItemsWithNewIds, collectEraserTargetsAtWorldPoint, copyManagedImage, createCustomShapeItem, cullItemsByViewport, deleteManagedImage, expandCustomShapeTemplate, formatCameraTransform, formatItemPlacementTransform, hitTestWorldPoint, isArrowBindTarget, isManagedImage, itemHitTestWorldPoint, loadImageFileAsRasterSceneSource, markImageAsManaged, reorderManagedImages, resolveArrowBindingsInScene, restackManagedImages, rotateManagedImage, snapArrowEndpointToShape };
|
|
320
|
+
export { ARROW_BIND_SNAP_PX, type ApplePencilNavOptions, ArrowEndpointBinding, Camera2D, type CreateCustomShapeContent, type CustomShapeSize, DEFAULT_TEXT_FONT_SIZE, type EncodeCanvasToBlobOptions, type LoadRasterImageFileOptions, MANAGED_KEY, MAX_RASTER_EMBED_DIMENSION, type RasterEmbedMode, type RasterSceneSource, Rect, SvgVectorRenderer, type SvgVectorRendererOptions, VectorScene, VectorSceneItem, type ViewportInputOptions, addManagedImage, attachApplePencilNavigation, attachViewportInput, bakeArrowItemToAbsolute, buildCustomShapeChildrenSvg, buildTextSvg, cloneVectorSceneItemWithNewId, cloneVectorSceneItemsWithNewIds, collectEraserTargetsAtWorldPoint, copyManagedImage, createCustomShapeItem, cullItemsByViewport, deleteManagedImage, encodeCanvasToBlob, expandCustomShapeTemplate, formatCameraTransform, formatItemPlacementTransform, hitTestWorldPoint, isArrowBindTarget, isManagedImage, itemHitTestWorldPoint, loadImageFileAsRasterSceneSource, markImageAsManaged, reorderManagedImages, resolveArrowBindingsInScene, restackManagedImages, rotateManagedImage, snapArrowEndpointToShape };
|
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,13 @@ export { a as ArrowBindings, b as VectorPathPoint, n as normalizeRect, r as rect
|
|
|
5
5
|
export { H as HydratedSceneItemsWithAssetsResult, h as hydrateSceneItemsWithAssets } from './asset-hydration-BEG21hMp.js';
|
|
6
6
|
export { D as DEFAULT_STROKE_STYLE, F as FreehandSvgPayload, S as StrokeStyle, a as applyStrokeToItem, b as buildArrowSvg, c as buildDrawDotSvg, d as buildEllipseSvg, e as buildFreehandPathSvg, f as buildLineSvg, g as buildRectSvg, h as computeFreehandSvgPayload, i as createDrawDotItem, j as createEllipseItem, k as createFreehandStrokeItem, l as createImageFromVectorTrace, m as createImageItem, n as createLineItem, o as createRectangleItem, p as createShapeId, q as createTextItem, r as lineEndpointsToLocal, s as rebuildItemSvg, t as resolveStrokeStyle } from './shape-builders-ENwnK-zT.js';
|
|
7
7
|
|
|
8
|
+
type EncodeCanvasToBlobOptions = {
|
|
9
|
+
mimeType?: string;
|
|
10
|
+
quality?: number;
|
|
11
|
+
fallbackMimeTypes?: readonly string[];
|
|
12
|
+
};
|
|
13
|
+
declare function encodeCanvasToBlob(canvas: HTMLCanvasElement, options?: EncodeCanvasToBlobOptions): Promise<Blob>;
|
|
14
|
+
|
|
8
15
|
/**
|
|
9
16
|
* Embeds the bitmap as a single SVG `<image>` (data URL or blob URL) instead of tracing paths.
|
|
10
17
|
* Avoids huge path counts and keeps screenshots/photos sharp.
|
|
@@ -310,4 +317,4 @@ declare const DEFAULT_TEXT_FONT_SIZE = 18;
|
|
|
310
317
|
*/
|
|
311
318
|
declare function buildTextSvg(content: string, _width: number, _height: number, fillColor?: string, fontSize?: number): string;
|
|
312
319
|
|
|
313
|
-
export { ARROW_BIND_SNAP_PX, type ApplePencilNavOptions, ArrowEndpointBinding, Camera2D, type CreateCustomShapeContent, type CustomShapeSize, DEFAULT_TEXT_FONT_SIZE, type LoadRasterImageFileOptions, MANAGED_KEY, MAX_RASTER_EMBED_DIMENSION, type RasterEmbedMode, type RasterSceneSource, Rect, SvgVectorRenderer, type SvgVectorRendererOptions, VectorScene, VectorSceneItem, type ViewportInputOptions, addManagedImage, attachApplePencilNavigation, attachViewportInput, bakeArrowItemToAbsolute, buildCustomShapeChildrenSvg, buildTextSvg, cloneVectorSceneItemWithNewId, cloneVectorSceneItemsWithNewIds, collectEraserTargetsAtWorldPoint, copyManagedImage, createCustomShapeItem, cullItemsByViewport, deleteManagedImage, expandCustomShapeTemplate, formatCameraTransform, formatItemPlacementTransform, hitTestWorldPoint, isArrowBindTarget, isManagedImage, itemHitTestWorldPoint, loadImageFileAsRasterSceneSource, markImageAsManaged, reorderManagedImages, resolveArrowBindingsInScene, restackManagedImages, rotateManagedImage, snapArrowEndpointToShape };
|
|
320
|
+
export { ARROW_BIND_SNAP_PX, type ApplePencilNavOptions, ArrowEndpointBinding, Camera2D, type CreateCustomShapeContent, type CustomShapeSize, DEFAULT_TEXT_FONT_SIZE, type EncodeCanvasToBlobOptions, type LoadRasterImageFileOptions, MANAGED_KEY, MAX_RASTER_EMBED_DIMENSION, type RasterEmbedMode, type RasterSceneSource, Rect, SvgVectorRenderer, type SvgVectorRendererOptions, VectorScene, VectorSceneItem, type ViewportInputOptions, addManagedImage, attachApplePencilNavigation, attachViewportInput, bakeArrowItemToAbsolute, buildCustomShapeChildrenSvg, buildTextSvg, cloneVectorSceneItemWithNewId, cloneVectorSceneItemsWithNewIds, collectEraserTargetsAtWorldPoint, copyManagedImage, createCustomShapeItem, cullItemsByViewport, deleteManagedImage, encodeCanvasToBlob, expandCustomShapeTemplate, formatCameraTransform, formatItemPlacementTransform, hitTestWorldPoint, isArrowBindTarget, isManagedImage, itemHitTestWorldPoint, loadImageFileAsRasterSceneSource, markImageAsManaged, reorderManagedImages, resolveArrowBindingsInScene, restackManagedImages, rotateManagedImage, snapArrowEndpointToShape };
|
package/dist/index.js
CHANGED
|
@@ -78,6 +78,47 @@ var Camera2D = class {
|
|
|
78
78
|
}
|
|
79
79
|
};
|
|
80
80
|
|
|
81
|
+
// src/image/canvas-encode.ts
|
|
82
|
+
var DEFAULT_FALLBACK_MIME_TYPES = ["image/png"];
|
|
83
|
+
var tryCanvasToBlob = (canvas, mimeType, quality) => new Promise((resolve) => {
|
|
84
|
+
canvas.toBlob((blob) => resolve(blob), mimeType, quality);
|
|
85
|
+
});
|
|
86
|
+
var blobFromDataUrl = async (dataUrl) => {
|
|
87
|
+
const response = await fetch(dataUrl);
|
|
88
|
+
const blob = await response.blob();
|
|
89
|
+
if (blob.size === 0) {
|
|
90
|
+
throw new Error("Failed to encode canvas to blob");
|
|
91
|
+
}
|
|
92
|
+
return blob;
|
|
93
|
+
};
|
|
94
|
+
async function encodeCanvasToBlob(canvas, options) {
|
|
95
|
+
const primaryMimeType = options?.mimeType ?? "image/png";
|
|
96
|
+
const quality = options?.quality;
|
|
97
|
+
const mimeTypes = [
|
|
98
|
+
primaryMimeType,
|
|
99
|
+
...options?.fallbackMimeTypes ?? DEFAULT_FALLBACK_MIME_TYPES
|
|
100
|
+
].filter(
|
|
101
|
+
(mimeType, index, mimeTypeList) => mimeTypeList.indexOf(mimeType) === index
|
|
102
|
+
);
|
|
103
|
+
for (const mimeType of mimeTypes) {
|
|
104
|
+
const blob = await tryCanvasToBlob(
|
|
105
|
+
canvas,
|
|
106
|
+
mimeType,
|
|
107
|
+
mimeType === primaryMimeType ? quality : void 0
|
|
108
|
+
);
|
|
109
|
+
if (blob) {
|
|
110
|
+
return blob;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
for (const mimeType of mimeTypes) {
|
|
114
|
+
const dataUrl = canvas.toDataURL(mimeType, quality);
|
|
115
|
+
if (dataUrl && dataUrl !== "data:,") {
|
|
116
|
+
return blobFromDataUrl(dataUrl);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
throw new Error("Failed to encode canvas to blob");
|
|
120
|
+
}
|
|
121
|
+
|
|
81
122
|
// src/image/indexed-db-image-store.ts
|
|
82
123
|
var DB_NAME = "canvu-image-store";
|
|
83
124
|
var DB_VERSION = 1;
|
|
@@ -193,21 +234,6 @@ async function renderPageToCanvas(page, scale) {
|
|
|
193
234
|
await page.render({ canvas, viewport }).promise;
|
|
194
235
|
return { canvas, width: w, height: h };
|
|
195
236
|
}
|
|
196
|
-
function canvasToBlob(canvas, mime, quality) {
|
|
197
|
-
return new Promise((resolve, reject) => {
|
|
198
|
-
canvas.toBlob(
|
|
199
|
-
(blob) => {
|
|
200
|
-
if (!blob) {
|
|
201
|
-
reject(new Error("Could not encode blob"));
|
|
202
|
-
return;
|
|
203
|
-
}
|
|
204
|
-
resolve(blob);
|
|
205
|
-
},
|
|
206
|
-
mime,
|
|
207
|
-
quality
|
|
208
|
-
);
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
237
|
function normalizePdfPageNumbers(pageNumbers, pageCount) {
|
|
212
238
|
if (!pageNumbers || pageNumbers.length === 0) {
|
|
213
239
|
return Array.from({ length: pageCount }, (_, index) => index + 1);
|
|
@@ -269,7 +295,7 @@ async function loadPdfToStore(file, store, options) {
|
|
|
269
295
|
const page = await pdf.getPage(pageNumber);
|
|
270
296
|
const { canvas, width, height } = await renderPageToCanvas(page, scale);
|
|
271
297
|
const mime = "image/png";
|
|
272
|
-
const pageBlob = await
|
|
298
|
+
const pageBlob = await encodeCanvasToBlob(canvas, { mimeType: mime });
|
|
273
299
|
const blobId = await store.storeOriginal(pageBlob);
|
|
274
300
|
const thumbnailBlobId = storeThumbnails ? await (async () => {
|
|
275
301
|
const thumbScale = Math.min(1, 256 / Math.max(width, height));
|
|
@@ -284,7 +310,9 @@ async function loadPdfToStore(file, store, options) {
|
|
|
284
310
|
tCtx.imageSmoothingQuality = "high";
|
|
285
311
|
tCtx.drawImage(canvas, 0, 0, tw, th);
|
|
286
312
|
}
|
|
287
|
-
const thumbBlob = await
|
|
313
|
+
const thumbBlob = await encodeCanvasToBlob(thumbCanvas, {
|
|
314
|
+
mimeType: mime
|
|
315
|
+
});
|
|
288
316
|
return await store.storeThumbnail(thumbBlob);
|
|
289
317
|
})() : "";
|
|
290
318
|
const pageResult = {
|
|
@@ -324,19 +352,9 @@ function loadImageFromObjectUrl(objectUrl) {
|
|
|
324
352
|
});
|
|
325
353
|
}
|
|
326
354
|
function canvasToObjectUrl(canvas, mime, quality) {
|
|
327
|
-
return
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
if (!blob) {
|
|
331
|
-
reject(new Error("Could not encode image blob"));
|
|
332
|
-
return;
|
|
333
|
-
}
|
|
334
|
-
resolve(URL.createObjectURL(blob));
|
|
335
|
-
},
|
|
336
|
-
mime,
|
|
337
|
-
quality
|
|
338
|
-
);
|
|
339
|
-
});
|
|
355
|
+
return encodeCanvasToBlob(canvas, { mimeType: mime, quality }).then(
|
|
356
|
+
(blob) => URL.createObjectURL(blob)
|
|
357
|
+
);
|
|
340
358
|
}
|
|
341
359
|
async function loadImageFileAsRasterSceneSource(file, maxDimensionOrOptions) {
|
|
342
360
|
const { maxDimension: maxDim, embedMode } = normalizeLoadOptions(maxDimensionOrOptions);
|
|
@@ -2368,6 +2386,6 @@ var VectorScene = class {
|
|
|
2368
2386
|
}
|
|
2369
2387
|
};
|
|
2370
2388
|
|
|
2371
|
-
export { ARROW_BIND_SNAP_PX, Camera2D, DEFAULT_STROKE_STYLE, DEFAULT_TEXT_FONT_SIZE, MANAGED_KEY, MAX_RASTER_EMBED_DIMENSION, SvgVectorRenderer, VectorScene, addManagedImage, applyStrokeToItem, attachApplePencilNavigation, attachViewportInput, bakeArrowItemToAbsolute, buildArrowSvg, buildCustomShapeChildrenSvg, buildDrawDotSvg, buildEllipseSvg, buildFreehandPathSvg, buildLineSvg, buildRectSvg, buildTextSvg, cloneVectorSceneItemWithNewId, cloneVectorSceneItemsWithNewIds, collectEraserTargetsAtWorldPoint, computeFreehandSvgPayload, copyManagedImage, createCustomShapeItem, createDrawDotItem, createEllipseItem, createFreehandStrokeItem, createImageFromVectorTrace, createImageItem, createLineItem, createRectangleItem, createShapeId, createTextItem, cullItemsByViewport, deleteManagedImage, expandCustomShapeTemplate, formatCameraTransform, formatItemPlacementTransform, hitTestWorldPoint, hydrateSceneItemsWithAssets, isArrowBindTarget, isManagedImage, itemHitTestWorldPoint, lineEndpointsToLocal, loadImageFileAsRasterSceneSource, markImageAsManaged, normalizeRect, rebuildItemSvg, rectsIntersect, reorderManagedImages, resolveArrowBindingsInScene, resolveStrokeStyle, restackManagedImages, rotateManagedImage, snapArrowEndpointToShape };
|
|
2389
|
+
export { ARROW_BIND_SNAP_PX, Camera2D, DEFAULT_STROKE_STYLE, DEFAULT_TEXT_FONT_SIZE, MANAGED_KEY, MAX_RASTER_EMBED_DIMENSION, SvgVectorRenderer, VectorScene, addManagedImage, applyStrokeToItem, attachApplePencilNavigation, attachViewportInput, bakeArrowItemToAbsolute, buildArrowSvg, buildCustomShapeChildrenSvg, buildDrawDotSvg, buildEllipseSvg, buildFreehandPathSvg, buildLineSvg, buildRectSvg, buildTextSvg, cloneVectorSceneItemWithNewId, cloneVectorSceneItemsWithNewIds, collectEraserTargetsAtWorldPoint, computeFreehandSvgPayload, copyManagedImage, createCustomShapeItem, createDrawDotItem, createEllipseItem, createFreehandStrokeItem, createImageFromVectorTrace, createImageItem, createLineItem, createRectangleItem, createShapeId, createTextItem, cullItemsByViewport, deleteManagedImage, encodeCanvasToBlob, expandCustomShapeTemplate, formatCameraTransform, formatItemPlacementTransform, hitTestWorldPoint, hydrateSceneItemsWithAssets, isArrowBindTarget, isManagedImage, itemHitTestWorldPoint, lineEndpointsToLocal, loadImageFileAsRasterSceneSource, markImageAsManaged, normalizeRect, rebuildItemSvg, rectsIntersect, reorderManagedImages, resolveArrowBindingsInScene, resolveStrokeStyle, restackManagedImages, rotateManagedImage, snapArrowEndpointToShape };
|
|
2372
2390
|
//# sourceMappingURL=index.js.map
|
|
2373
2391
|
//# sourceMappingURL=index.js.map
|