@objectifthunes/three-book 0.2.1 → 0.2.2
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/SpreadContent.d.ts +72 -0
- package/dist/SpreadContent.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +532 -441
- package/package.json +1 -1
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SpreadContent — manages a double-page spread where a single image and text
|
|
3
|
+
* blocks span across two facing pages.
|
|
4
|
+
*
|
|
5
|
+
* Creates a double-width canvas and exposes `left` and `right` IPageContent
|
|
6
|
+
* objects. Each half uses textureST to crop to its side of the shared texture.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* const spread = new SpreadContent({ pageWidth: 512, pageHeight: 768 });
|
|
10
|
+
* spread.source = spreadImage;
|
|
11
|
+
* spread.addText({ text: 'Hello', x: 100, y: 400, width: 900, fontSize: 28 });
|
|
12
|
+
* bookContent.pages.push(spread.left); // left page
|
|
13
|
+
* bookContent.pages.push(spread.right); // right page
|
|
14
|
+
*
|
|
15
|
+
* // Per-frame:
|
|
16
|
+
* spread.update(bookRoot);
|
|
17
|
+
*/
|
|
18
|
+
import * as THREE from 'three';
|
|
19
|
+
import { TextBlock } from './TextBlock';
|
|
20
|
+
import type { TextBlockOptions } from './TextBlock';
|
|
21
|
+
import type { IPageContent } from './PageContent';
|
|
22
|
+
export interface SpreadContentOptions {
|
|
23
|
+
/** Width of a single page in pixels. The spread canvas will be 2x this. */
|
|
24
|
+
pageWidth?: number;
|
|
25
|
+
/** Height of a single page in pixels. */
|
|
26
|
+
pageHeight?: number;
|
|
27
|
+
/** Source canvas or image to draw as the base layer (full spread width). */
|
|
28
|
+
source?: HTMLCanvasElement | HTMLImageElement | null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Returns the 0-indexed page indices where a spread can start.
|
|
32
|
+
* In a staple-bound book, facing page pairs are (1,2), (3,4), (5,6), …
|
|
33
|
+
* — i.e. odd indices where i+1 < pageCount.
|
|
34
|
+
*/
|
|
35
|
+
export declare function getSpreadPairs(pageCount: number): number[];
|
|
36
|
+
export declare class SpreadContent {
|
|
37
|
+
readonly canvas: HTMLCanvasElement;
|
|
38
|
+
readonly texts: TextBlock[];
|
|
39
|
+
readonly left: IPageContent;
|
|
40
|
+
readonly right: IPageContent;
|
|
41
|
+
/** Width of a single page in pixels. */
|
|
42
|
+
readonly pageWidth: number;
|
|
43
|
+
/** Height of a single page in pixels. */
|
|
44
|
+
readonly pageHeight: number;
|
|
45
|
+
private readonly ctx;
|
|
46
|
+
private readonly _texture;
|
|
47
|
+
private _source;
|
|
48
|
+
get texture(): THREE.Texture;
|
|
49
|
+
/** The base layer drawn beneath text blocks (full spread width). */
|
|
50
|
+
get source(): HTMLCanvasElement | HTMLImageElement | null;
|
|
51
|
+
set source(v: HTMLCanvasElement | HTMLImageElement | null);
|
|
52
|
+
constructor(options?: SpreadContentOptions);
|
|
53
|
+
addText(options?: TextBlockOptions): TextBlock;
|
|
54
|
+
removeText(text: TextBlock): void;
|
|
55
|
+
/** Update a text block by index. Only provided fields are changed. */
|
|
56
|
+
updateText(index: number, options: Partial<TextBlockOptions>): void;
|
|
57
|
+
/**
|
|
58
|
+
* Re-composite the canvas: source layer + text blocks.
|
|
59
|
+
* Call every frame (or when content changes).
|
|
60
|
+
*
|
|
61
|
+
* @param root Optional THREE.Object3D to traverse for texture sync
|
|
62
|
+
* (needed because three-book clones material textures).
|
|
63
|
+
*/
|
|
64
|
+
update(root?: THREE.Object3D): void;
|
|
65
|
+
/**
|
|
66
|
+
* Traverse `root` and set `needsUpdate = true` on every material map whose
|
|
67
|
+
* source image is this spread's canvas.
|
|
68
|
+
*/
|
|
69
|
+
syncMaterials(root: THREE.Object3D): void;
|
|
70
|
+
dispose(): void;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=SpreadContent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpreadContent.d.ts","sourceRoot":"","sources":["../src/SpreadContent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,MAAM,WAAW,oBAAoB;IACnC,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,GAAG,IAAI,CAAC;CACtD;AA2BD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAM1D;AAED,qBAAa,aAAa;IACxB,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,CAAM;IACjC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAE7B,wCAAwC;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,yCAAyC;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA2B;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAC/C,OAAO,CAAC,OAAO,CAA8C;IAE7D,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO,CAA0B;IAEtD,oEAAoE;IACpE,IAAI,MAAM,IAAI,iBAAiB,GAAG,gBAAgB,GAAG,IAAI,CAAyB;IAClF,IAAI,MAAM,CAAC,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,GAAG,IAAI,EAAuB;gBAEpE,OAAO,CAAC,EAAE,oBAAoB;IAsB1C,OAAO,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS;IAM9C,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAKjC,sEAAsE;IACtE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAqBnE;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI;IAiBnC;;;OAGG;IACH,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI;IAezC,OAAO,IAAI,IAAI;CAGhB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -24,6 +24,8 @@ export { TextBlock } from './TextBlock';
|
|
|
24
24
|
export type { TextBlockOptions } from './TextBlock';
|
|
25
25
|
export { TextOverlayContent } from './TextOverlayContent';
|
|
26
26
|
export type { TextOverlayContentOptions } from './TextOverlayContent';
|
|
27
|
+
export { SpreadContent, getSpreadPairs } from './SpreadContent';
|
|
28
|
+
export type { SpreadContentOptions } from './SpreadContent';
|
|
27
29
|
export { drawImageWithFit, createPageTexture, loadImage, PX_PER_UNIT } from './textureUtils';
|
|
28
30
|
export type { ImageFitMode, LoadedImage } from './textureUtils';
|
|
29
31
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAE1E,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,gBAAgB,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEzE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAElF,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,4BAA4B,EAC5B,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE3F,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAE1E,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,gBAAgB,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEzE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAElF,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,4BAA4B,EAC5B,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE3F,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAChE,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAG5D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7F,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
|