postext-folio 0.1.1 → 0.2.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.
Files changed (42) hide show
  1. package/README.md +59 -4
  2. package/dist/bookGeometry.d.ts +77 -0
  3. package/dist/bookGeometry.d.ts.map +1 -0
  4. package/dist/bookGeometry.js +204 -0
  5. package/dist/bookGeometry.js.map +1 -0
  6. package/dist/deskTextures.d.ts +24 -0
  7. package/dist/deskTextures.d.ts.map +1 -0
  8. package/dist/deskTextures.js +88 -0
  9. package/dist/deskTextures.js.map +1 -0
  10. package/dist/environments.d.ts +27 -0
  11. package/dist/environments.d.ts.map +1 -0
  12. package/dist/environments.js +90 -0
  13. package/dist/environments.js.map +1 -0
  14. package/dist/index.d.ts +5 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +3 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/pageFlip.d.ts +160 -26
  19. package/dist/pageFlip.d.ts.map +1 -1
  20. package/dist/pageFlip.js +1195 -342
  21. package/dist/pageFlip.js.map +1 -1
  22. package/dist/pageFlipFlat.d.ts +131 -0
  23. package/dist/pageFlipFlat.d.ts.map +1 -0
  24. package/dist/pageFlipFlat.js +870 -0
  25. package/dist/pageFlipFlat.js.map +1 -0
  26. package/dist/paper.d.ts +40 -0
  27. package/dist/paper.d.ts.map +1 -0
  28. package/dist/paper.js +65 -0
  29. package/dist/paper.js.map +1 -0
  30. package/dist/postext.d.ts +12 -2
  31. package/dist/postext.d.ts.map +1 -1
  32. package/dist/postext.js +167 -6
  33. package/dist/postext.js.map +1 -1
  34. package/dist/procedural.d.ts +35 -0
  35. package/dist/procedural.d.ts.map +1 -0
  36. package/dist/procedural.js +390 -0
  37. package/dist/procedural.js.map +1 -0
  38. package/dist/viewer.d.ts +41 -1
  39. package/dist/viewer.d.ts.map +1 -1
  40. package/dist/viewer.js +133 -16
  41. package/dist/viewer.js.map +1 -1
  42. package/package.json +3 -3
@@ -0,0 +1,390 @@
1
+ import { DataTexture, LinearFilter, LinearMipmapLinearFilter, NoColorSpace, RepeatWrapping, RGBAFormat, SRGBColorSpace, UnsignedByteType, } from "three";
2
+ // Surface textures made on the spot (no image files): tileable height fields
3
+ // for the paper's relief and the desk's, turned into normal maps, with the
4
+ // desk's colour and roughness alongside. Each is made once and shared.
5
+ /** A seeded random stream (mulberry32): the same texture every time. */
6
+ function random(seed) {
7
+ let a = seed >>> 0;
8
+ return () => {
9
+ a = (a + 0x6d2b79f5) >>> 0;
10
+ let t = a;
11
+ t = Math.imul(t ^ (t >>> 15), t | 1);
12
+ t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
13
+ return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
14
+ };
15
+ }
16
+ /** Value noise that repeats every `period` cells (a whole number), so a
17
+ * field built from it tiles. */
18
+ function tileNoise(period, seed) {
19
+ const rnd = random(seed);
20
+ const grid = new Float32Array(period * period).map(() => rnd());
21
+ return (x, y) => {
22
+ const xi = Math.floor(x);
23
+ const yi = Math.floor(y);
24
+ const fx = x - xi;
25
+ const fy = y - yi;
26
+ const sx = fx * fx * (3 - 2 * fx);
27
+ const sy = fy * fy * (3 - 2 * fy);
28
+ const w = (i) => ((i % period) + period) % period;
29
+ const at = (i, j) => grid[w(j) * period + w(i)];
30
+ const a = at(xi, yi);
31
+ const b = at(xi + 1, yi);
32
+ const c = at(xi, yi + 1);
33
+ const d = at(xi + 1, yi + 1);
34
+ return a + (b - a) * sx + (c - a) * sy + (a - b - c + d) * sx * sy;
35
+ };
36
+ }
37
+ /** Fractal noise over the unit square (u, v in 0 … 1), tiling: `octaves`
38
+ * layers from `base` cells across, each twice as fine and `gain` as loud. */
39
+ function fbm(base, octaves, seed, gain = 0.5) {
40
+ const layers = Array.from({ length: octaves }, (_, i) => ({ n: tileNoise(base << i, seed + i * 101), p: base << i, a: gain ** i }));
41
+ const total = layers.reduce((s, l) => s + l.a, 0);
42
+ return (u, v) => {
43
+ let s = 0;
44
+ for (const l of layers)
45
+ s += l.a * l.n(u * l.p, v * l.p);
46
+ return s / total;
47
+ };
48
+ }
49
+ function field(size, f) {
50
+ const h = new Float32Array(size * size);
51
+ for (let y = 0; y < size; y++)
52
+ for (let x = 0; x < size; x++)
53
+ h[y * size + x] = f(x / size, y / size);
54
+ return { size, h };
55
+ }
56
+ /** Adds fibres to a field: short strands at random angles, as felted
57
+ * paper pulp lies (wrapping round the tile's edges). */
58
+ function addFibres(fd, count, length, height, seed, bias = 0) {
59
+ const rnd = random(seed);
60
+ const { size, h } = fd;
61
+ for (let i = 0; i < count; i++) {
62
+ const x0 = rnd() * size;
63
+ const y0 = rnd() * size;
64
+ // Pulp lines up a little with the machine direction (the grain).
65
+ const a = (rnd() - 0.5) * Math.PI * (1 - bias);
66
+ const len = (length[0] + rnd() * (length[1] - length[0])) * size;
67
+ const amp = height * (0.4 + 0.6 * rnd());
68
+ const steps = Math.ceil(len);
69
+ const bend = (rnd() - 0.5) * 0.6;
70
+ for (let s = 0; s < steps; s++) {
71
+ const t = s / steps;
72
+ const ang = a + bend * t;
73
+ const x = Math.round(x0 + Math.cos(ang) * s);
74
+ const y = Math.round(y0 + Math.sin(ang) * s);
75
+ const fade = Math.sin(Math.PI * t);
76
+ const idx = (((y % size) + size) % size) * size + (((x % size) + size) % size);
77
+ h[idx] += amp * fade;
78
+ }
79
+ }
80
+ }
81
+ /** Normals (tangent space, as three.js reads a normal map) from a height
82
+ * field whose tile spans `tileMm` and whose heights are in mm × `relief`. */
83
+ function normalsOf(fd, strength) {
84
+ const { size, h } = fd;
85
+ const out = new Uint8Array(size * size * 4);
86
+ const at = (x, y) => h[((y + size) % size) * size + ((x + size) % size)];
87
+ for (let y = 0; y < size; y++) {
88
+ for (let x = 0; x < size; x++) {
89
+ const dx = (at(x + 1, y) - at(x - 1, y)) * strength;
90
+ // Texture rows run down; three.js's v runs up.
91
+ const dy = (at(x, y - 1) - at(x, y + 1)) * strength;
92
+ const len = Math.hypot(dx, dy, 1);
93
+ const i = (y * size + x) * 4;
94
+ out[i] = Math.round((0.5 - (0.5 * dx) / len) * 255);
95
+ out[i + 1] = Math.round((0.5 - (0.5 * dy) / len) * 255);
96
+ out[i + 2] = Math.round((0.5 + 0.5 / len) * 255);
97
+ out[i + 3] = 255;
98
+ }
99
+ }
100
+ return out;
101
+ }
102
+ function texture(data, size, srgb) {
103
+ const tex = new DataTexture(data, size, size, RGBAFormat, UnsignedByteType);
104
+ tex.wrapS = tex.wrapT = RepeatWrapping;
105
+ tex.magFilter = LinearFilter;
106
+ tex.minFilter = LinearMipmapLinearFilter;
107
+ tex.generateMipmaps = true;
108
+ tex.colorSpace = srgb ? SRGBColorSpace : NoColorSpace;
109
+ tex.needsUpdate = true;
110
+ return tex;
111
+ }
112
+ function normalize(fd) {
113
+ let lo = Infinity;
114
+ let hi = -Infinity;
115
+ for (const v of fd.h) {
116
+ lo = Math.min(lo, v);
117
+ hi = Math.max(hi, v);
118
+ }
119
+ const span = hi - lo || 1;
120
+ for (let i = 0; i < fd.h.length; i++)
121
+ fd.h[i] = (fd.h[i] - lo) / span;
122
+ return fd;
123
+ }
124
+ /**
125
+ * The relief of each paper surface the trade names, as a normal map:
126
+ * smooth (calendered: a faint mottle), vellum (a fine even tooth), wove
127
+ * (felted fibres, the texture of most book papers), laid (the laid lines a
128
+ * dandy roll presses about a millimetre apart, crossed by chain lines
129
+ * every 25 mm), linen (an embossed cross-weave) and felt (the soft
130
+ * irregular marks of a felt).
131
+ */
132
+ export function paperRelief(kind) {
133
+ const size = 512;
134
+ let fd;
135
+ let tileMm;
136
+ let strength;
137
+ switch (kind) {
138
+ case "smooth": {
139
+ tileMm = 12;
140
+ const n = fbm(8, 5, 11);
141
+ fd = field(size, (u, v) => n(u, v));
142
+ strength = 0.6;
143
+ break;
144
+ }
145
+ case "vellum": {
146
+ tileMm = 10;
147
+ const n = fbm(32, 4, 23, 0.6);
148
+ fd = field(size, (u, v) => n(u, v));
149
+ strength = 3.2;
150
+ break;
151
+ }
152
+ case "wove": {
153
+ tileMm = 16;
154
+ const n = fbm(16, 5, 37, 0.55);
155
+ fd = field(size, (u, v) => 0.6 * n(u, v));
156
+ addFibres(fd, 2600, [0.02, 0.09], 0.22, 41, 0.35);
157
+ strength = 3.4;
158
+ break;
159
+ }
160
+ case "laid": {
161
+ // 25 laid lines per tile of 25 mm (1 mm apart) and one chain line.
162
+ tileMm = 25;
163
+ const n = fbm(16, 5, 53, 0.55);
164
+ fd = field(size, (u, v) => {
165
+ const laid = Math.pow(0.5 + 0.5 * Math.cos(2 * Math.PI * 25 * v), 3);
166
+ const chain = Math.exp(-Math.pow((((u + 0.5) % 1) - 0.5) / 0.006, 2));
167
+ return 0.55 * laid + 0.5 * chain + 0.35 * n(u, v);
168
+ });
169
+ addFibres(fd, 1200, [0.01, 0.05], 0.12, 59, 0.3);
170
+ strength = 3;
171
+ break;
172
+ }
173
+ case "linen": {
174
+ // Threads about 0.4 mm apart: 16 per 6 mm tile, over and under.
175
+ tileMm = 6;
176
+ const n = fbm(8, 4, 67, 0.5);
177
+ const t = 16;
178
+ fd = field(size, (u, v) => {
179
+ const a = Math.sin(2 * Math.PI * t * u);
180
+ const b = Math.sin(2 * Math.PI * t * v);
181
+ const over = Math.sin(Math.PI * t * u) * Math.sin(Math.PI * t * v) > 0;
182
+ return (over ? Math.abs(a) * 0.6 + Math.abs(b) * 0.4 : Math.abs(b) * 0.6 + Math.abs(a) * 0.4) + 0.4 * n(u, v);
183
+ });
184
+ strength = 2.6;
185
+ break;
186
+ }
187
+ case "felt": {
188
+ tileMm = 30;
189
+ const warp = fbm(4, 3, 71);
190
+ const n = fbm(8, 5, 73, 0.6);
191
+ fd = field(size, (u, v) => {
192
+ const w = warp(u, v);
193
+ return n(u + 0.15 * w, v - 0.15 * w);
194
+ });
195
+ addFibres(fd, 900, [0.01, 0.04], 0.06, 79);
196
+ strength = 7;
197
+ break;
198
+ }
199
+ }
200
+ normalize(fd);
201
+ return { normal: texture(normalsOf(fd, strength), size, false), tileMm };
202
+ }
203
+ const rgb = (hex) => [1, 3, 5].map((i) => parseInt(hex.slice(i, i + 2), 16));
204
+ const mix3 = (a, b, t) => a.map((x, i) => x + (b[i] - x) * t);
205
+ /**
206
+ * The surfaces a book can lie on: oak and walnut (planks with their grain
207
+ * and pores under a satin finish), linen cloth, felt, pebbled leather,
208
+ * polished marble with its veins, and a plain painted top.
209
+ */
210
+ export function deskSurface(kind) {
211
+ const size = 512;
212
+ const color = new Uint8Array(size * size * 4);
213
+ const rough = new Uint8Array(size * size * 4);
214
+ let fd;
215
+ let tileMm = 300;
216
+ let strength = 2;
217
+ let roughnessScale = 1;
218
+ const put = (i, c, r) => {
219
+ color[i * 4] = Math.round(Math.min(255, Math.max(0, c[0])));
220
+ color[i * 4 + 1] = Math.round(Math.min(255, Math.max(0, c[1])));
221
+ color[i * 4 + 2] = Math.round(Math.min(255, Math.max(0, c[2])));
222
+ color[i * 4 + 3] = 255;
223
+ const g = Math.round(Math.min(1, Math.max(0, r)) * 255);
224
+ rough[i * 4] = rough[i * 4 + 1] = rough[i * 4 + 2] = g;
225
+ rough[i * 4 + 3] = 255;
226
+ };
227
+ switch (kind) {
228
+ case "oak":
229
+ case "walnut": {
230
+ // Planks 120 mm wide running along x, each cut from its own log: the
231
+ // grain lines (the growth rings sliced through) wander slowly, the
232
+ // pores are fine streaks along them, the joints thin dark lines,
233
+ // under a satin varnish.
234
+ tileMm = 480;
235
+ const planks = 4;
236
+ const dark = rgb(kind === "oak" ? "#9a6b42" : "#3e2617");
237
+ const light = rgb(kind === "oak" ? "#cfa476" : "#6f4b33");
238
+ const wander = fbm(2, 4, kind === "oak" ? 3 : 5, 0.5);
239
+ const figure = fbm(4, 5, 7, 0.55);
240
+ const streak = tileNoise(64, 9);
241
+ fd = field(size, () => 0);
242
+ for (let y = 0; y < size; y++) {
243
+ const v = y / size;
244
+ const plank = Math.floor(v * planks);
245
+ const inPlank = v * planks - plank;
246
+ const shade = 0.92 + 0.16 * random(plank * 7 + 1)();
247
+ for (let x = 0; x < size; x++) {
248
+ const u = x / size;
249
+ // Rings: lines across the plank, bent by a slow wander.
250
+ const w = wander((u + plank * 0.31) % 1, (inPlank * 0.25 + plank * 0.25) % 1);
251
+ const ring = 0.5 + 0.5 * Math.sin(2 * Math.PI * (9 * inPlank + 2.2 * w + plank * 0.37));
252
+ const late = Math.pow(ring, 6);
253
+ const fig = figure(u, v);
254
+ // Pores: noise stretched 64:1 along the grain.
255
+ // Pores: short flecks, noise stretched 8:1 along the grain.
256
+ const pore = Math.max(0, streak((u * 32) % 64, (v * 256) % 64) - 0.8) * 5;
257
+ const seam = Math.min(inPlank, 1 - inPlank) * planks < 0.004 ? 1 : 0;
258
+ const t = 0.5 + 0.35 * (fig - 0.5) * 2 - 0.45 * late;
259
+ const c = mix3(dark, light, Math.min(1, Math.max(0, t))).map((ch) => ch * shade * (1 - 0.45 * seam - 0.1 * pore));
260
+ put(y * size + x, c, 0.42 + 0.2 * pore + 0.08 * late);
261
+ fd.h[y * size + x] = -0.3 * late - 0.25 * pore - 3 * seam + 0.1 * fig;
262
+ }
263
+ }
264
+ strength = 1.2;
265
+ break;
266
+ }
267
+ case "linen": {
268
+ tileMm = 12;
269
+ const base = rgb("#d9d0bf");
270
+ const n = fbm(8, 4, 13);
271
+ const slub = fbm(4, 3, 17);
272
+ const t = 24;
273
+ fd = field(size, () => 0);
274
+ for (let y = 0; y < size; y++) {
275
+ for (let x = 0; x < size; x++) {
276
+ const u = x / size;
277
+ const v = y / size;
278
+ const a = Math.abs(Math.sin(2 * Math.PI * t * (u + 0.01 * slub(u, v))));
279
+ const b = Math.abs(Math.sin(2 * Math.PI * t * (v + 0.01 * slub(v, u))));
280
+ const over = Math.sin(Math.PI * t * u) * Math.sin(Math.PI * t * v) > 0;
281
+ const h = over ? 0.7 * a + 0.3 * b : 0.7 * b + 0.3 * a;
282
+ const k = 0.85 + 0.15 * h + 0.08 * (n(u, v) - 0.5);
283
+ put(y * size + x, base.map((c) => c * k), 0.92);
284
+ fd.h[y * size + x] = h + 0.3 * n(u, v);
285
+ }
286
+ }
287
+ strength = 3.5;
288
+ break;
289
+ }
290
+ case "felt": {
291
+ tileMm = 40;
292
+ const base = rgb("#3e5a49");
293
+ const n = fbm(8, 6, 19, 0.6);
294
+ fd = field(size, (u, v) => n(u, v));
295
+ addFibres(fd, 6000, [0.004, 0.02], 0.15, 23);
296
+ for (let i = 0; i < size * size; i++)
297
+ put(i, base.map((c) => c * (0.85 + 0.3 * (fd.h[i] - 0.5))), 1);
298
+ strength = 4;
299
+ break;
300
+ }
301
+ case "leather": {
302
+ tileMm = 60;
303
+ const base = rgb("#6a3a28");
304
+ // Pebbles: the distance to the nearest of a jittered grid of points.
305
+ const cells = 28;
306
+ const rnd = random(29);
307
+ const pts = Array.from({ length: cells * cells }, () => [rnd(), rnd()]);
308
+ const n = fbm(8, 4, 31);
309
+ fd = field(size, (u, v) => {
310
+ const cx = Math.floor(u * cells);
311
+ const cy = Math.floor(v * cells);
312
+ let d1 = 9;
313
+ let d2 = 9;
314
+ for (let j = -1; j <= 1; j++)
315
+ for (let i = -1; i <= 1; i++) {
316
+ const gx = (cx + i + cells) % cells;
317
+ const gy = (cy + j + cells) % cells;
318
+ const p = pts[gy * cells + gx];
319
+ const dx = (cx + i + p[0]) / cells - u;
320
+ const dy = (cy + j + p[1]) / cells - v;
321
+ const d = Math.hypot(dx, dy) * cells;
322
+ if (d < d1)
323
+ [d1, d2] = [d, d1];
324
+ else if (d < d2)
325
+ d2 = d;
326
+ }
327
+ return Math.min(1, (d2 - d1) * 1.6) + 0.25 * n(u, v);
328
+ });
329
+ for (let i = 0; i < size * size; i++)
330
+ put(i, base.map((c) => c * (0.75 + 0.35 * fd.h[i])), 0.45 + 0.25 * (1 - fd.h[i]));
331
+ strength = 3;
332
+ break;
333
+ }
334
+ case "marble": {
335
+ tileMm = 500;
336
+ const base = rgb("#ece9e3");
337
+ const vein = rgb("#8d8a86");
338
+ const turb = fbm(3, 6, 37, 0.55);
339
+ const fine = fbm(16, 3, 41);
340
+ fd = field(size, () => 0);
341
+ for (let y = 0; y < size; y++) {
342
+ for (let x = 0; x < size; x++) {
343
+ const u = x / size;
344
+ const v = y / size;
345
+ const t = Math.abs(Math.sin(2 * Math.PI * (2 * u + v + 4 * turb(u, v))));
346
+ const veins = Math.pow(1 - t, 10);
347
+ const c = mix3(base, vein, 0.8 * veins).map((ch) => ch * (0.97 + 0.06 * (fine(u, v) - 0.5)));
348
+ put(y * size + x, c, 0.12 + 0.05 * veins);
349
+ fd.h[y * size + x] = -0.05 * veins;
350
+ }
351
+ }
352
+ strength = 1;
353
+ roughnessScale = 1;
354
+ break;
355
+ }
356
+ case "plain": {
357
+ tileMm = 200;
358
+ const base = rgb("#cbc6be");
359
+ const n = fbm(8, 5, 43);
360
+ fd = field(size, (u, v) => n(u, v));
361
+ for (let i = 0; i < size * size; i++)
362
+ put(i, base.map((c) => c * (0.98 + 0.04 * fd.h[i])), 0.8);
363
+ strength = 0.6;
364
+ break;
365
+ }
366
+ }
367
+ return {
368
+ color: texture(color, size, true),
369
+ normal: texture(normalsOf(normalize(fd), strength), size, false),
370
+ roughness: texture(rough, size, false),
371
+ tileMm,
372
+ roughnessScale,
373
+ };
374
+ }
375
+ /** Cache: each relief or surface is made once per page load. */
376
+ const reliefs = new Map();
377
+ const desks = new Map();
378
+ export function cachedRelief(kind) {
379
+ let r = reliefs.get(kind);
380
+ if (!r)
381
+ reliefs.set(kind, (r = paperRelief(kind)));
382
+ return r;
383
+ }
384
+ export function cachedDesk(kind) {
385
+ let d = desks.get(kind);
386
+ if (!d)
387
+ desks.set(kind, (d = deskSurface(kind)));
388
+ return d;
389
+ }
390
+ //# sourceMappingURL=procedural.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procedural.js","sourceRoot":"","sources":["../src/procedural.ts"],"names":[],"mappings":"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"}
package/dist/viewer.d.ts CHANGED
@@ -1,9 +1,42 @@
1
+ import { type FolioConfig, type FolioPaperConfig } from "postext";
1
2
  import { type PageSource } from "./pageFlip";
2
- /** A page of the book: its source, or its source with a text alternative. */
3
+ /** A page of the book: its source, or its source with a text alternative
4
+ * and the paper it is printed on when that is not the book's (a plate
5
+ * section on gloss in a matte book). */
3
6
  export type FolioPage = PageSource | {
4
7
  src: PageSource;
5
8
  alt?: string;
9
+ paper?: FolioPaperConfig;
6
10
  };
11
+ /** How the 3D book is presented. */
12
+ export interface FolioAppearance {
13
+ /** View, paper, binding, desk and light (postext's `folio` config). */
14
+ folio?: FolioConfig;
15
+ /** The trim width of a page in mm (the paper's caliper and the cover's
16
+ * board are scaled against it). Default 150. */
17
+ pageWidthMm?: number;
18
+ /** Pages of the book before the first page given and after the last
19
+ * (the other chapters of a book shown a chapter at a time): they are
20
+ * never drawn, only counted for the thickness of the page block. */
21
+ extraPages?: {
22
+ before: number;
23
+ after: number;
24
+ };
25
+ /** Where the scanned desk textures are served (see
26
+ * `FlipAppearance.textureBaseUrl`). */
27
+ textureBaseUrl?: string;
28
+ /** The first page given is the book's front cover, the last its back
29
+ * cover (when it falls on a verso): they turn as boards and no case
30
+ * is drawn round the pages. */
31
+ covers?: {
32
+ front: boolean;
33
+ back: boolean;
34
+ };
35
+ /** The picture printed on the spine: the image the `folio.binding.
36
+ * spineImage` resource names, as a URL (or a drawn canvas or image).
37
+ * See `FlipAppearance.spineImage`. */
38
+ spineImage?: PageSource;
39
+ }
7
40
  export interface FolioLabels {
8
41
  /** The viewer's accessible name. */
9
42
  region: string;
@@ -40,6 +73,8 @@ export interface FolioOptions {
40
73
  * still announced to screen readers (a visually hidden live region). */
41
74
  showCount?: boolean;
42
75
  labels?: Partial<FolioLabels>;
76
+ /** How the 3D book is presented (see {@link FolioAppearance}). */
77
+ appearance?: FolioAppearance;
43
78
  /** Told of every spread that settles: its index and the pages on show. */
44
79
  onChange?: (state: FolioState) => void;
45
80
  /** Told as soon as the book is sent to another spread (a button, a key,
@@ -84,6 +119,11 @@ export interface FolioViewer {
84
119
  readonly pageSize: FolioPageSize;
85
120
  /** Swaps the labels (a host that changes language). */
86
121
  setLabels(labels: Partial<FolioLabels>): void;
122
+ /** Changes how the 3D book is presented. */
123
+ setAppearance(appearance: FolioAppearance): void;
124
+ /** Eases the view back to the one the settings give (after the reader
125
+ * orbited it with a right-drag). */
126
+ resetView(): void;
87
127
  readonly state: FolioState;
88
128
  dispose(): void;
89
129
  }
@@ -1 +1 @@
1
- {"version":3,"file":"viewer.d.ts","sourceRoot":"","sources":["../src/viewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,UAAU,EAAkB,MAAM,YAAY,CAAC;AAInF,6EAA6E;AAC7E,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG;IAAE,GAAG,EAAE,UAAU,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,MAAM,WAAW,WAAW;IAC1B,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb;wCACoC;IACpC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACnD;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB;0CACsC;IACtC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;2EACuE;IACvE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,gDAAgD;IAChD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;0EACsE;IACtE,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACpC;wEACoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;4CACwC;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;6EACyE;IACzE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9B,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACvC;sEACkE;IAClE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACvC;;4DAEwD;IACxD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;CAC1C;AAED;uDACuD;AACvD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,iCAAiC;IACjC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B;0EACsE;IACtE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAC/D,2DAA2D;IAC3D,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACjE,IAAI,IAAI,IAAI,CAAC;IACb,IAAI,IAAI,IAAI,CAAC;IACb;uDACmD;IACnD,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC;IACzH,8CAA8C;IAC9C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,uDAAuD;IACvD,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,OAAO,IAAI,IAAI,CAAC;CACjB;AAeD,qEAAqE;AACrE,eAAO,MAAM,YAAY,MAAM,CAAC;AAiChC;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,GAAG,WAAW,CAmetF"}
1
+ {"version":3,"file":"viewer.d.ts","sourceRoot":"","sources":["../src/viewer.ts"],"names":[],"mappings":"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"}