@react-x11/components 0.13.0 → 0.14.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 (128) hide show
  1. package/dist/html/controls.d.ts +29 -2
  2. package/dist/html/controls.d.ts.map +1 -1
  3. package/dist/html/controls.js +70 -2
  4. package/dist/html/controls.js.map +1 -1
  5. package/dist/html/css/cascade.d.ts.map +1 -1
  6. package/dist/html/css/cascade.js +26 -4
  7. package/dist/html/css/cascade.js.map +1 -1
  8. package/dist/html/css/color.d.ts +18 -0
  9. package/dist/html/css/color.d.ts.map +1 -1
  10. package/dist/html/css/color.js +27 -0
  11. package/dist/html/css/color.js.map +1 -1
  12. package/dist/html/css/parse.d.ts +18 -4
  13. package/dist/html/css/parse.d.ts.map +1 -1
  14. package/dist/html/css/parse.js +66 -28
  15. package/dist/html/css/parse.js.map +1 -1
  16. package/dist/html/css/style.d.ts +128 -15
  17. package/dist/html/css/style.d.ts.map +1 -1
  18. package/dist/html/css/style.js +561 -144
  19. package/dist/html/css/style.js.map +1 -1
  20. package/dist/html/css/transform.d.ts +85 -0
  21. package/dist/html/css/transform.d.ts.map +1 -0
  22. package/dist/html/css/transform.js +425 -0
  23. package/dist/html/css/transform.js.map +1 -0
  24. package/dist/html/css/ua.d.ts.map +1 -1
  25. package/dist/html/css/ua.js +14 -2
  26. package/dist/html/css/ua.js.map +1 -1
  27. package/dist/html/css/values.d.ts +4 -0
  28. package/dist/html/css/values.d.ts.map +1 -1
  29. package/dist/html/css/values.js.map +1 -1
  30. package/dist/html/fonts.d.ts +55 -5
  31. package/dist/html/fonts.d.ts.map +1 -1
  32. package/dist/html/fonts.js +284 -23
  33. package/dist/html/fonts.js.map +1 -1
  34. package/dist/html/layout/axes.d.ts +14 -0
  35. package/dist/html/layout/axes.d.ts.map +1 -0
  36. package/dist/html/layout/axes.js +28 -0
  37. package/dist/html/layout/axes.js.map +1 -0
  38. package/dist/html/layout/block.d.ts +93 -12
  39. package/dist/html/layout/block.d.ts.map +1 -1
  40. package/dist/html/layout/block.js +389 -39
  41. package/dist/html/layout/block.js.map +1 -1
  42. package/dist/html/layout/boxes.d.ts +59 -1
  43. package/dist/html/layout/boxes.d.ts.map +1 -1
  44. package/dist/html/layout/boxes.js +22 -2
  45. package/dist/html/layout/boxes.js.map +1 -1
  46. package/dist/html/layout/cache.d.ts +1 -1
  47. package/dist/html/layout/cache.d.ts.map +1 -1
  48. package/dist/html/layout/cache.js +6 -0
  49. package/dist/html/layout/cache.js.map +1 -1
  50. package/dist/html/layout/css-grid.d.ts.map +1 -1
  51. package/dist/html/layout/css-grid.js +90 -18
  52. package/dist/html/layout/css-grid.js.map +1 -1
  53. package/dist/html/layout/flex.d.ts.map +1 -1
  54. package/dist/html/layout/flex.js +570 -83
  55. package/dist/html/layout/flex.js.map +1 -1
  56. package/dist/html/layout/inline.d.ts +3 -0
  57. package/dist/html/layout/inline.d.ts.map +1 -1
  58. package/dist/html/layout/inline.js +144 -54
  59. package/dist/html/layout/inline.js.map +1 -1
  60. package/dist/html/layout/multicol.d.ts +42 -0
  61. package/dist/html/layout/multicol.d.ts.map +1 -0
  62. package/dist/html/layout/multicol.js +897 -0
  63. package/dist/html/layout/multicol.js.map +1 -0
  64. package/dist/html/layout/shaping.d.ts +7 -0
  65. package/dist/html/layout/shaping.d.ts.map +1 -1
  66. package/dist/html/layout/shaping.js +25 -20
  67. package/dist/html/layout/shaping.js.map +1 -1
  68. package/dist/html/layout/table.d.ts.map +1 -1
  69. package/dist/html/layout/table.js +62 -18
  70. package/dist/html/layout/table.js.map +1 -1
  71. package/dist/html/node.d.ts +3 -0
  72. package/dist/html/node.d.ts.map +1 -1
  73. package/dist/html/node.js +263 -36
  74. package/dist/html/node.js.map +1 -1
  75. package/dist/html/paint.d.ts +79 -4
  76. package/dist/html/paint.d.ts.map +1 -1
  77. package/dist/html/paint.js +1213 -141
  78. package/dist/html/paint.js.map +1 -1
  79. package/dist/html/svg.d.ts +15 -2
  80. package/dist/html/svg.d.ts.map +1 -1
  81. package/dist/html/svg.js +249 -17
  82. package/dist/html/svg.js.map +1 -1
  83. package/dist/html/widgets.js +87 -7
  84. package/dist/html/widgets.js.map +1 -1
  85. package/dist/html/woff2.d.ts +14 -0
  86. package/dist/html/woff2.d.ts.map +1 -0
  87. package/dist/html/woff2.js +608 -0
  88. package/dist/html/woff2.js.map +1 -0
  89. package/dist/maps/controller.d.ts +17 -1
  90. package/dist/maps/controller.d.ts.map +1 -1
  91. package/dist/maps/controller.js +27 -7
  92. package/dist/maps/controller.js.map +1 -1
  93. package/dist/richtext/node.d.ts +8 -1
  94. package/dist/richtext/node.d.ts.map +1 -1
  95. package/dist/richtext/node.js +5 -1
  96. package/dist/richtext/node.js.map +1 -1
  97. package/dist/richtext/runs.d.ts +25 -6
  98. package/dist/richtext/runs.d.ts.map +1 -1
  99. package/dist/richtext/runs.js +240 -24
  100. package/dist/richtext/runs.js.map +1 -1
  101. package/package.json +1 -1
  102. package/src/html/controls.ts +85 -2
  103. package/src/html/css/cascade.ts +23 -0
  104. package/src/html/css/color.ts +29 -0
  105. package/src/html/css/parse.ts +71 -31
  106. package/src/html/css/style.ts +664 -147
  107. package/src/html/css/transform.ts +459 -0
  108. package/src/html/css/ua.ts +15 -2
  109. package/src/html/css/values.ts +4 -0
  110. package/src/html/fonts.ts +312 -29
  111. package/src/html/layout/axes.ts +62 -0
  112. package/src/html/layout/block.ts +444 -37
  113. package/src/html/layout/boxes.ts +65 -3
  114. package/src/html/layout/cache.ts +6 -0
  115. package/src/html/layout/css-grid.ts +95 -22
  116. package/src/html/layout/flex.ts +671 -77
  117. package/src/html/layout/inline.ts +149 -55
  118. package/src/html/layout/multicol.ts +977 -0
  119. package/src/html/layout/shaping.ts +27 -18
  120. package/src/html/layout/table.ts +62 -19
  121. package/src/html/node.ts +300 -37
  122. package/src/html/paint.ts +1406 -206
  123. package/src/html/svg.ts +277 -19
  124. package/src/html/widgets.ts +95 -9
  125. package/src/html/woff2.ts +612 -0
  126. package/src/maps/controller.ts +28 -7
  127. package/src/richtext/node.ts +13 -2
  128. package/src/richtext/runs.ts +313 -35
@@ -0,0 +1,608 @@
1
+ // WOFF2 → sfnt: the font inside the container the web serves one in.
2
+ //
3
+ // A WOFF2 is an OpenType font with its tables in one Brotli stream and its
4
+ // outlines written another way, and nearly every `@font-face` on the web
5
+ // names nothing else. A text engine that reads the container needs none of
6
+ // this, as ntk's does, through fontkit. CoreText reads an sfnt and nothing
7
+ // else, so react-x11's `loadFont` refuses a WOFF2 on macOS, and a page set
8
+ // in a web font was set in its fallback there: nextjs.org in Arial, for
9
+ // Geist. What an engine cannot read as served it is handed as the font the
10
+ // file holds (`WebFonts._register`), which is what this rebuilds.
11
+ //
12
+ // The format is W3C's (WOFF File Format 2.0): a header, a directory whose
13
+ // lengths are variable-width integers, then the stream. Three tables may be
14
+ // stored another way than an sfnt has them: `glyf` as seven streams —
15
+ // contour counts, point counts, flags, coordinates as triplets of one to
16
+ // four bytes, composites, the bounding boxes that are not their points',
17
+ // instructions — with `loca` left out, since an outline's offset is where
18
+ // it lands, and `hmtx` without the left side bearings that equal a glyph's
19
+ // `xMin`. Each is put back as the table an sfnt has (5.1, 5.3 and 5.4), and
20
+ // everything else is copied. What comes out is the font, not the file it was made from: the
21
+ // outlines are packed as the reference decoder packs them, which is the
22
+ // tightest a `glyf` allows and not necessarily what the font's author wrote.
23
+ //
24
+ // Brotli is the caller's (`inflate`), and `sfntFromWoff2` brings node's: its
25
+ // `zlib` has one, and nothing in `src/` names a node module, so it is
26
+ // reached the way `src/embed/host.ts` reaches `child_process`. A collection
27
+ // (`ttcf`), a file that ends early and anything else that does not read as
28
+ // the format come back as null, a source that did not load — and so does
29
+ // every file on a runtime with no Brotli to read one with.
30
+ const SIGNATURE = 0x774f4632; // 'wOF2'
31
+ const TTCF = 0x74746366;
32
+ /** The tags a directory entry names by number (4.1, "Known Table Tags"). */
33
+ const KNOWN_TAGS = ('cmap head hhea hmtx maxp name OS/2 post cvt_ fpgm glyf loca prep CFF_ ' +
34
+ 'VORG EBDT EBLC gasp hdmx kern LTSH PCLT VDMX vhea vmtx BASE GDEF GPOS ' +
35
+ 'GSUB EBSC JSTF MATH CBDT CBLC COLR CPAL SVG_ sbix acnt avar bdat bloc ' +
36
+ 'bsln cvar fdsc feat fmtx fvar gvar hsty just lcar mort morx opbd prop ' +
37
+ 'trak Zapf Silf Glat Gloc Feat Sill')
38
+ .split(' ')
39
+ .map((tag) => tag.replace('_', ' '));
40
+ /** Whether bytes are a WOFF2 file, by their signature. */
41
+ export function isWoff2(bytes) {
42
+ return (bytes.length >= 4 &&
43
+ bytes[0] === 0x77 &&
44
+ bytes[1] === 0x4f &&
45
+ bytes[2] === 0x46 &&
46
+ bytes[3] === 0x32);
47
+ }
48
+ /** More than any one font's tables come to: a CJK family's face is a
49
+ * quarter of it. */
50
+ const LARGEST_FONT = 1 << 26;
51
+ let brotli = null;
52
+ /** node's Brotli, or null where there is none. The specifier is a variable
53
+ * on purpose: a literal `import('node:zlib')` would need `@types/node` in
54
+ * the build program, and a bundler would try to resolve it. */
55
+ function nodeBrotli() {
56
+ brotli ??= (async () => {
57
+ try {
58
+ const specifier = 'node:zlib';
59
+ const zlib = (await import(/* @vite-ignore */ specifier));
60
+ const inflate = zlib.brotliDecompressSync;
61
+ // a few bytes of Brotli can stand for gigabytes, and the stream is a
62
+ // page's: past the largest font there is, it is not one
63
+ return typeof inflate === 'function'
64
+ ? (data) => inflate(data, { maxOutputLength: LARGEST_FONT })
65
+ : null;
66
+ }
67
+ catch {
68
+ return null;
69
+ }
70
+ })();
71
+ return brotli;
72
+ }
73
+ /** The sfnt a WOFF2 file holds (`woff2ToSfnt`), read with node's Brotli;
74
+ * null for a file that is not one, and where there is no Brotli. */
75
+ export async function sfntFromWoff2(bytes) {
76
+ if (!isWoff2(bytes))
77
+ return null;
78
+ const inflate = await nodeBrotli();
79
+ return inflate ? woff2ToSfnt(bytes, inflate) : null;
80
+ }
81
+ /** A cursor over bytes, big-endian as an sfnt is. A read past the end
82
+ * throws, which is how a truncated file is found. */
83
+ class Reader {
84
+ bytes;
85
+ _view;
86
+ pos = 0;
87
+ constructor(bytes) {
88
+ this.bytes = bytes;
89
+ this._view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
90
+ }
91
+ u8() {
92
+ return this._view.getUint8(this.pos++);
93
+ }
94
+ u16() {
95
+ const v = this._view.getUint16(this.pos);
96
+ this.pos += 2;
97
+ return v;
98
+ }
99
+ i16() {
100
+ const v = this._view.getInt16(this.pos);
101
+ this.pos += 2;
102
+ return v;
103
+ }
104
+ u32() {
105
+ const v = this._view.getUint32(this.pos);
106
+ this.pos += 4;
107
+ return v;
108
+ }
109
+ /** The next `length` bytes, as a view. */
110
+ take(length) {
111
+ if (length < 0 || this.pos + length > this.bytes.length) {
112
+ throw new RangeError('woff2: a stream ends early');
113
+ }
114
+ const out = this.bytes.subarray(this.pos, this.pos + length);
115
+ this.pos += length;
116
+ return out;
117
+ }
118
+ /** `UIntBase128`: seven bits a byte, the high bit for "more" (3.1). */
119
+ base128() {
120
+ let value = 0;
121
+ for (let i = 0; i < 5; i += 1) {
122
+ const byte = this.u8();
123
+ if (i === 0 && byte === 0x80)
124
+ break; // a leading zero
125
+ if (value > 0x1ffffff)
126
+ break; // would overflow 32 bits
127
+ value = value * 128 + (byte & 0x7f);
128
+ if (!(byte & 0x80))
129
+ return value;
130
+ }
131
+ throw new RangeError('woff2: a length that is not a UIntBase128');
132
+ }
133
+ /** `255UInt16`: one to three bytes for a 16-bit number (3.1). */
134
+ u255() {
135
+ const code = this.u8();
136
+ if (code === 253)
137
+ return this.u16();
138
+ if (code === 255)
139
+ return this.u8() + 253;
140
+ if (code === 254)
141
+ return this.u8() + 506;
142
+ return code;
143
+ }
144
+ }
145
+ /** Bytes being written, growing as they are. */
146
+ class Writer {
147
+ bytes = new Uint8Array(1024);
148
+ length = 0;
149
+ _room(more) {
150
+ if (this.length + more <= this.bytes.length)
151
+ return;
152
+ const grown = new Uint8Array(Math.max(this.bytes.length * 2, this.length + more));
153
+ grown.set(this.bytes.subarray(0, this.length));
154
+ this.bytes = grown;
155
+ }
156
+ u8(v) {
157
+ this._room(1);
158
+ this.bytes[this.length++] = v & 0xff;
159
+ }
160
+ u16(v) {
161
+ this._room(2);
162
+ this.bytes[this.length++] = (v >> 8) & 0xff;
163
+ this.bytes[this.length++] = v & 0xff;
164
+ }
165
+ put(data) {
166
+ this._room(data.length);
167
+ this.bytes.set(data, this.length);
168
+ this.length += data.length;
169
+ }
170
+ /** Zeros up to a multiple of four, which a glyph and a table start on. */
171
+ align() {
172
+ const pad = (4 - (this.length & 3)) & 3;
173
+ this._room(pad);
174
+ this.bytes.fill(0, this.length, this.length + pad);
175
+ this.length += pad;
176
+ }
177
+ done() {
178
+ return this.bytes.subarray(0, this.length);
179
+ }
180
+ }
181
+ // `glyf` flags (OpenType, "Simple Glyph Description")
182
+ const ON_CURVE = 0x01;
183
+ const X_SHORT = 0x02;
184
+ const Y_SHORT = 0x04;
185
+ const REPEAT = 0x08;
186
+ const X_SAME = 0x10; // or, with X_SHORT, "positive"
187
+ const Y_SAME = 0x20;
188
+ const OVERLAP_SIMPLE = 0x40;
189
+ // composite glyph flags
190
+ const ARG_WORDS = 0x0001;
191
+ const HAVE_SCALE = 0x0008;
192
+ const MORE_COMPONENTS = 0x0020;
193
+ const HAVE_XY_SCALE = 0x0040;
194
+ const HAVE_TWO_BY_TWO = 0x0080;
195
+ const HAVE_INSTRUCTIONS = 0x0100;
196
+ /**
197
+ * `glyf` and `loca` from a transformed `glyf` (5.1): each glyph's record
198
+ * written as an sfnt has it, and the offsets they landed at.
199
+ */
200
+ function outlines(data) {
201
+ const head = new Reader(data);
202
+ head.u16(); // reserved
203
+ const options = head.u16();
204
+ const numGlyphs = head.u16();
205
+ const indexFormat = head.u16();
206
+ const sizes = [0, 0, 0, 0, 0, 0, 0].map(() => head.u32());
207
+ const [contours, points, flags, glyphs, composites, boxes, instructions] = sizes.map((size) => new Reader(head.take(size)));
208
+ const overlaps = options & 1 ? head.take((numGlyphs + 7) >> 3) : new Uint8Array(0);
209
+ // the boxes that are written out, a bit a glyph, then the boxes
210
+ const explicit = boxes.take(((numGlyphs + 31) >> 5) << 2);
211
+ const bit = (map, i) => i >> 3 < map.length && (map[i >> 3] & (0x80 >> (i & 7))) !== 0;
212
+ const out = new Writer();
213
+ const offsets = new Uint32Array(numGlyphs + 1);
214
+ const xMins = new Int16Array(numGlyphs);
215
+ const xs = [];
216
+ const ys = [];
217
+ const on = [];
218
+ const moves = new Writer();
219
+ const rises = new Writer();
220
+ for (let g = 0; g < numGlyphs; g += 1) {
221
+ offsets[g] = out.length;
222
+ const count = contours.i16();
223
+ if (count === 0)
224
+ continue; // no outline, and no record
225
+ if (count < 0) {
226
+ // a composite: its components as they are, and a box always written
227
+ if (!bit(explicit, g))
228
+ throw new RangeError('woff2: a composite, no box');
229
+ const box = boxes.take(8);
230
+ const from = composites.pos;
231
+ let more = true;
232
+ let instructed = false;
233
+ while (more) {
234
+ const flag = composites.u16();
235
+ composites.pos += 2; // the component's glyph
236
+ composites.pos += flag & ARG_WORDS ? 4 : 2;
237
+ if (flag & HAVE_SCALE)
238
+ composites.pos += 2;
239
+ else if (flag & HAVE_XY_SCALE)
240
+ composites.pos += 4;
241
+ else if (flag & HAVE_TWO_BY_TWO)
242
+ composites.pos += 8;
243
+ if (flag & HAVE_INSTRUCTIONS)
244
+ instructed = true;
245
+ more = (flag & MORE_COMPONENTS) !== 0;
246
+ }
247
+ const to = composites.pos;
248
+ composites.pos = from;
249
+ out.u16(0xffff);
250
+ out.put(box);
251
+ out.put(composites.take(to - from));
252
+ if (instructed) {
253
+ const length = glyphs.u255();
254
+ out.u16(length);
255
+ out.put(instructions.take(length));
256
+ }
257
+ xMins[g] = (box[0] << 8) | box[1];
258
+ out.align();
259
+ continue;
260
+ }
261
+ // a simple glyph: where each contour ends, then its points as the
262
+ // moves between them
263
+ const ends = [];
264
+ let total = 0;
265
+ for (let c = 0; c < count; c += 1) {
266
+ total += points.u255();
267
+ ends.push(total - 1);
268
+ }
269
+ xs.length = ys.length = on.length = total;
270
+ let x = 0;
271
+ let y = 0;
272
+ let xMin = 0;
273
+ let yMin = 0;
274
+ let xMax = 0;
275
+ let yMax = 0;
276
+ for (let p = 0; p < total; p += 1) {
277
+ // a triplet: a flag that says how many bytes the move is in, which
278
+ // way each half of it goes and whether the point is on the curve
279
+ // (5.2, table "Triplet Encoding")
280
+ const flag = flags.u8();
281
+ const f = flag & 0x7f;
282
+ let dx;
283
+ let dy;
284
+ if (f < 10) {
285
+ dx = 0;
286
+ dy = ((f & 14) << 7) + glyphs.u8();
287
+ if (!(f & 1))
288
+ dy = -dy;
289
+ }
290
+ else if (f < 20) {
291
+ dx = (((f - 10) & 14) << 7) + glyphs.u8();
292
+ dy = 0;
293
+ if (!(f & 1))
294
+ dx = -dx;
295
+ }
296
+ else if (f < 84) {
297
+ const b0 = f - 20;
298
+ const b1 = glyphs.u8();
299
+ dx = 1 + (b0 & 0x30) + (b1 >> 4);
300
+ dy = 1 + ((b0 & 0x0c) << 2) + (b1 & 0x0f);
301
+ if (!(f & 1))
302
+ dx = -dx;
303
+ if (!(f & 2))
304
+ dy = -dy;
305
+ }
306
+ else if (f < 120) {
307
+ const b0 = f - 84;
308
+ dx = 1 + (Math.floor(b0 / 12) << 8) + glyphs.u8();
309
+ dy = 1 + (((b0 % 12) >> 2) << 8) + glyphs.u8();
310
+ if (!(f & 1))
311
+ dx = -dx;
312
+ if (!(f & 2))
313
+ dy = -dy;
314
+ }
315
+ else if (f < 124) {
316
+ const b0 = glyphs.u8();
317
+ const b1 = glyphs.u8();
318
+ const b2 = glyphs.u8();
319
+ dx = (b0 << 4) + (b1 >> 4);
320
+ dy = ((b1 & 0x0f) << 8) + b2;
321
+ if (!(f & 1))
322
+ dx = -dx;
323
+ if (!(f & 2))
324
+ dy = -dy;
325
+ }
326
+ else {
327
+ dx = glyphs.u16();
328
+ dy = glyphs.u16();
329
+ if (!(f & 1))
330
+ dx = -dx;
331
+ if (!(f & 2))
332
+ dy = -dy;
333
+ }
334
+ x += dx;
335
+ y += dy;
336
+ xs[p] = x;
337
+ ys[p] = y;
338
+ on[p] = !(flag & 0x80);
339
+ if (p === 0) {
340
+ xMin = xMax = x;
341
+ yMin = yMax = y;
342
+ }
343
+ else {
344
+ if (x < xMin)
345
+ xMin = x;
346
+ if (x > xMax)
347
+ xMax = x;
348
+ if (y < yMin)
349
+ yMin = y;
350
+ if (y > yMax)
351
+ yMax = y;
352
+ }
353
+ }
354
+ const length = glyphs.u255();
355
+ out.u16(count);
356
+ if (bit(explicit, g)) {
357
+ const box = boxes.take(8);
358
+ out.put(box);
359
+ xMin = (box[0] << 8) | box[1];
360
+ }
361
+ else {
362
+ // the box of its points, which is what an encoder leaves out
363
+ out.u16(xMin);
364
+ out.u16(yMin);
365
+ out.u16(xMax);
366
+ out.u16(yMax);
367
+ }
368
+ xMins[g] = xMin;
369
+ for (const end of ends)
370
+ out.u16(end);
371
+ out.u16(length);
372
+ out.put(instructions.take(length));
373
+ // The flags, a run of equal ones written once with a count, then the
374
+ // horizontal moves and the vertical ones: a byte where a move fits
375
+ // one, nothing where there is none.
376
+ moves.length = rises.length = 0;
377
+ let last = -1;
378
+ let repeats = 0;
379
+ let px = 0;
380
+ let py = 0;
381
+ for (let p = 0; p < total; p += 1) {
382
+ let flag = on[p] ? ON_CURVE : 0;
383
+ if (p === 0 && bit(overlaps, g))
384
+ flag |= OVERLAP_SIMPLE;
385
+ const dx = xs[p] - px;
386
+ const dy = ys[p] - py;
387
+ if (dx === 0)
388
+ flag |= X_SAME;
389
+ else if (dx > -256 && dx < 256) {
390
+ flag |= X_SHORT | (dx > 0 ? X_SAME : 0);
391
+ moves.u8(Math.abs(dx));
392
+ }
393
+ else
394
+ moves.u16(dx);
395
+ if (dy === 0)
396
+ flag |= Y_SAME;
397
+ else if (dy > -256 && dy < 256) {
398
+ flag |= Y_SHORT | (dy > 0 ? Y_SAME : 0);
399
+ rises.u8(Math.abs(dy));
400
+ }
401
+ else
402
+ rises.u16(dy);
403
+ if (flag === last && repeats !== 255) {
404
+ out.bytes[out.length - 1] |= REPEAT;
405
+ repeats += 1;
406
+ }
407
+ else {
408
+ if (repeats)
409
+ out.u8(repeats);
410
+ out.u8(flag);
411
+ repeats = 0;
412
+ }
413
+ last = flag;
414
+ px = xs[p];
415
+ py = ys[p];
416
+ }
417
+ if (repeats)
418
+ out.u8(repeats);
419
+ out.put(moves.done());
420
+ out.put(rises.done());
421
+ out.align();
422
+ }
423
+ offsets[numGlyphs] = out.length;
424
+ // `loca` in the width the font asked for, or the wider one where the
425
+ // outlines, packed again, no longer fit it
426
+ const long = indexFormat !== 0 || out.length > 0x1fffe;
427
+ const loca = new Uint8Array((numGlyphs + 1) * (long ? 4 : 2));
428
+ const view = new DataView(loca.buffer);
429
+ for (let g = 0; g <= numGlyphs; g += 1) {
430
+ if (long)
431
+ view.setUint32(g * 4, offsets[g]);
432
+ else
433
+ view.setUint16(g * 2, offsets[g] >> 1);
434
+ }
435
+ return { glyf: out.done(), loca, long, xMins };
436
+ }
437
+ /**
438
+ * `hmtx` from a transformed one (5.4): the advances as they were, and each
439
+ * side bearing the encoder left out put back as its glyph's `xMin`, which
440
+ * is what it left them out for equalling.
441
+ */
442
+ function metrics(data, numGlyphs, numHMetrics, xMins) {
443
+ const from = new Reader(data);
444
+ const flags = from.u8();
445
+ const advances = [];
446
+ for (let i = 0; i < numHMetrics; i += 1)
447
+ advances.push(from.u16());
448
+ const out = new Writer();
449
+ const bearings = [];
450
+ for (let i = 0; i < numHMetrics; i += 1) {
451
+ bearings.push(flags & 1 ? (xMins[i] ?? 0) : from.i16());
452
+ }
453
+ for (let i = numHMetrics; i < numGlyphs; i += 1) {
454
+ bearings.push(flags & 2 ? (xMins[i] ?? 0) : from.i16());
455
+ }
456
+ for (let i = 0; i < numGlyphs; i += 1) {
457
+ if (i < numHMetrics)
458
+ out.u16(advances[i]);
459
+ out.u16(bearings[i]);
460
+ }
461
+ return out.done();
462
+ }
463
+ function checksum(data) {
464
+ let sum = 0;
465
+ const whole = data.length & ~3;
466
+ for (let i = 0; i < whole; i += 4) {
467
+ sum =
468
+ (sum +
469
+ ((data[i] << 24) |
470
+ (data[i + 1] << 16) |
471
+ (data[i + 2] << 8) |
472
+ data[i + 3])) >>>
473
+ 0;
474
+ }
475
+ if (whole < data.length) {
476
+ let last = 0;
477
+ for (let i = whole; i < data.length; i += 1) {
478
+ last |= data[i] << (24 - 8 * (i - whole));
479
+ }
480
+ sum = (sum + last) >>> 0;
481
+ }
482
+ return sum;
483
+ }
484
+ /**
485
+ * The sfnt — TrueType or OpenType — a WOFF2 file holds, or null when the
486
+ * bytes are not one this reads. `inflate` is Brotli: the compressed stream
487
+ * in, its bytes out.
488
+ */
489
+ export function woff2ToSfnt(bytes, inflate) {
490
+ try {
491
+ return rebuild(bytes, inflate);
492
+ }
493
+ catch {
494
+ // truncated, or not the format: a source that did not load
495
+ return null;
496
+ }
497
+ }
498
+ function rebuild(bytes, inflate) {
499
+ const file = new Reader(bytes);
500
+ if (file.u32() !== SIGNATURE)
501
+ return null;
502
+ const flavor = file.u32();
503
+ // a collection shares tables between its fonts, and a face is one font
504
+ if (flavor === TTCF)
505
+ return null;
506
+ file.u32(); // length
507
+ const numTables = file.u16();
508
+ file.u16(); // reserved
509
+ file.u32(); // totalSfntSize
510
+ const compressed = file.u32();
511
+ file.pos = 48;
512
+ const entries = [];
513
+ for (let i = 0; i < numTables; i += 1) {
514
+ const flags = file.u8();
515
+ const known = flags & 0x3f;
516
+ const tag = known === 0x3f ? String.fromCharCode(...file.take(4)) : KNOWN_TAGS[known];
517
+ const version = flags >> 6;
518
+ const original = file.base128();
519
+ // `glyf` and `loca` are transformed at version 0 and plain at 3; every
520
+ // other table is plain at 0 (4.1, the flags' transformation version)
521
+ const transformed = tag === 'glyf' || tag === 'loca' ? version === 0 : version !== 0;
522
+ const length = transformed ? file.base128() : original;
523
+ entries.push({ tag, transformed, length, data: bytes });
524
+ }
525
+ if (new Set(entries.map((e) => e.tag)).size !== entries.length)
526
+ return null;
527
+ const stream = new Reader(inflate(file.take(compressed)));
528
+ for (const entry of entries)
529
+ entry.data = stream.take(entry.length);
530
+ const tables = new Map();
531
+ for (const entry of entries) {
532
+ if (!entry.transformed)
533
+ tables.set(entry.tag, entry.data);
534
+ }
535
+ const glyf = entries.find((e) => e.tag === 'glyf');
536
+ const loca = entries.find((e) => e.tag === 'loca');
537
+ let made = null;
538
+ if (glyf?.transformed) {
539
+ // the two are transformed together, and `loca` is then no bytes at all
540
+ if (!loca?.transformed || loca.length !== 0)
541
+ return null;
542
+ made = outlines(glyf.data);
543
+ tables.set('glyf', made.glyf);
544
+ tables.set('loca', made.loca);
545
+ }
546
+ else if (loca?.transformed)
547
+ return null;
548
+ const hmtx = entries.find((e) => e.tag === 'hmtx');
549
+ if (hmtx?.transformed) {
550
+ const hhea = tables.get('hhea');
551
+ const maxp = tables.get('maxp');
552
+ if (!made || !hhea || !maxp)
553
+ return null;
554
+ const numHMetrics = new Reader(hhea.subarray(34)).u16();
555
+ const numGlyphs = new Reader(maxp.subarray(4)).u16();
556
+ tables.set('hmtx', metrics(hmtx.data, numGlyphs, numHMetrics, made.xMins));
557
+ }
558
+ for (const entry of entries) {
559
+ // any other transform is one this format has not defined
560
+ if (entry.transformed && !tables.has(entry.tag))
561
+ return null;
562
+ }
563
+ const head = tables.get('head');
564
+ if (head && head.length >= 54) {
565
+ // `head` is written again: its checksum of the whole file is this
566
+ // file's, and its `loca` width is the one the offsets were written in
567
+ const copy = head.slice();
568
+ copy.fill(0, 8, 12);
569
+ if (made)
570
+ copy[51] = made.long ? 1 : 0;
571
+ tables.set('head', copy);
572
+ }
573
+ // The sfnt: a header, a directory in tag order, then each table on a
574
+ // four-byte boundary (OpenType, "Organization of an OpenType Font").
575
+ const tags = [...tables.keys()].sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
576
+ const count = tags.length;
577
+ let size = 12 + 16 * count;
578
+ for (const tag of tags)
579
+ size += (tables.get(tag).length + 3) & ~3;
580
+ const out = new Uint8Array(size);
581
+ const view = new DataView(out.buffer);
582
+ const log = Math.floor(Math.log2(count || 1));
583
+ view.setUint32(0, flavor);
584
+ view.setUint16(4, count);
585
+ view.setUint16(6, 16 << log);
586
+ view.setUint16(8, log);
587
+ view.setUint16(10, 16 * count - (16 << log));
588
+ let at = 12 + 16 * count;
589
+ let headAt = -1;
590
+ tags.forEach((tag, i) => {
591
+ const data = tables.get(tag);
592
+ const record = 12 + 16 * i;
593
+ for (let c = 0; c < 4; c += 1)
594
+ out[record + c] = tag.charCodeAt(c);
595
+ view.setUint32(record + 4, checksum(data));
596
+ view.setUint32(record + 8, at);
597
+ view.setUint32(record + 12, data.length);
598
+ out.set(data, at);
599
+ if (tag === 'head')
600
+ headAt = at;
601
+ at += (data.length + 3) & ~3;
602
+ });
603
+ if (headAt >= 0 && tables.get('head').length >= 12) {
604
+ view.setUint32(headAt + 8, (0xb1b0afba - checksum(out)) >>> 0);
605
+ }
606
+ return out;
607
+ }
608
+ //# sourceMappingURL=woff2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"woff2.js","sourceRoot":"","sources":["../../src/html/woff2.ts"],"names":[],"mappings":"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"}
@@ -102,6 +102,21 @@ export declare const glideClock: {
102
102
  arm: typeof arm;
103
103
  disarm(handle: unknown): void;
104
104
  };
105
+ /**
106
+ * The clock the settle window is measured on, and the timer that closes it.
107
+ *
108
+ * The shape of {@link glideClock}, and exported as it is — from this module
109
+ * and not from the package — so that a test can hold the window open. It is
110
+ * {@link SETTLE_MS} of wall-clock time, and a test that asks what the map
111
+ * does *while it is moving* is asking inside it: a runner slow enough to
112
+ * spend the window between the wheel and the frame that looks finds a map
113
+ * that has settled, and a frame that is no longer asked where a glide stops.
114
+ */
115
+ export declare const settleClock: {
116
+ now(): number;
117
+ arm: typeof arm;
118
+ disarm(handle: unknown): void;
119
+ };
105
120
  export declare class MapController {
106
121
  /**
107
122
  * What `<Map>`'s ref hands out. Made once, so it is the **same object**
@@ -284,7 +299,8 @@ export declare class MapController {
284
299
  *
285
300
  * Wall-clock time rather than a frame clock: this is a window a hundred
286
301
  * and forty milliseconds long compared inside a timer callback, and a
287
- * timer is the one thing that runs when no frame does.
302
+ * timer is the one thing that runs when no frame does. Read and armed
303
+ * through {@link settleClock}, which a test holds.
288
304
  */
289
305
  touch(): void;
290
306
  /**