emf-converter 4.4.8 → 4.4.10

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/browser.js CHANGED
@@ -1369,21 +1369,21 @@ var require_decoder = __commonJS({
1369
1369
  successiveACState = 0;
1370
1370
  }
1371
1371
  }
1372
- function decodeMcu(component2, decode3, mcu2, row, col) {
1372
+ function decodeMcu(component2, decode4, mcu2, row, col) {
1373
1373
  var mcuRow = mcu2 / mcusPerLine | 0;
1374
1374
  var mcuCol = mcu2 % mcusPerLine;
1375
1375
  var blockRow = mcuRow * component2.v + row;
1376
1376
  var blockCol = mcuCol * component2.h + col;
1377
1377
  if (component2.blocks[blockRow] === void 0 && opts.tolerantDecoding)
1378
1378
  return;
1379
- decode3(component2, component2.blocks[blockRow][blockCol]);
1379
+ decode4(component2, component2.blocks[blockRow][blockCol]);
1380
1380
  }
1381
- function decodeBlock(component2, decode3, mcu2) {
1381
+ function decodeBlock(component2, decode4, mcu2) {
1382
1382
  var blockRow = mcu2 / component2.blocksPerLine | 0;
1383
1383
  var blockCol = mcu2 % component2.blocksPerLine;
1384
1384
  if (component2.blocks[blockRow] === void 0 && opts.tolerantDecoding)
1385
1385
  return;
1386
- decode3(component2, component2.blocks[blockRow][blockCol]);
1386
+ decode4(component2, component2.blocks[blockRow][blockCol]);
1387
1387
  }
1388
1388
  var componentsLength = components.length;
1389
1389
  var component, i, j, k, n;
@@ -2104,12 +2104,12 @@ var require_decoder = __commonJS({
2104
2104
  return constructor;
2105
2105
  })();
2106
2106
  if (typeof module !== "undefined") {
2107
- module.exports = decode2;
2107
+ module.exports = decode3;
2108
2108
  } else if (typeof window !== "undefined") {
2109
2109
  window["jpeg-js"] = window["jpeg-js"] || {};
2110
- window["jpeg-js"].decode = decode2;
2110
+ window["jpeg-js"].decode = decode3;
2111
2111
  }
2112
- function decode2(jpegData, userOpts = {}) {
2112
+ function decode3(jpegData, userOpts = {}) {
2113
2113
  var defaultOpts = {
2114
2114
  // "undefined" means "Choose whether to transform colors based on the image’s color model."
2115
2115
  colorTransform: void 0,
@@ -2161,10 +2161,10 @@ var require_decoder = __commonJS({
2161
2161
  var require_jpeg_js = __commonJS({
2162
2162
  "node_modules/jpeg-js/index.js"(exports, module) {
2163
2163
  var encode2 = require_encoder();
2164
- var decode2 = require_decoder();
2164
+ var decode3 = require_decoder();
2165
2165
  module.exports = {
2166
2166
  encode: encode2,
2167
- decode: decode2
2167
+ decode: decode3
2168
2168
  };
2169
2169
  }
2170
2170
  });
@@ -4762,8 +4762,8 @@ var require_deflate2 = __commonJS({
4762
4762
  var Z_DEFAULT_COMPRESSION = -1;
4763
4763
  var Z_DEFAULT_STRATEGY = 0;
4764
4764
  var Z_DEFLATED = 8;
4765
- function Deflate(options) {
4766
- if (!(this instanceof Deflate)) return new Deflate(options);
4765
+ function Deflate(options2) {
4766
+ if (!(this instanceof Deflate)) return new Deflate(options2);
4767
4767
  this.options = utils.assign({
4768
4768
  level: Z_DEFAULT_COMPRESSION,
4769
4769
  method: Z_DEFLATED,
@@ -4772,7 +4772,7 @@ var require_deflate2 = __commonJS({
4772
4772
  memLevel: 8,
4773
4773
  strategy: Z_DEFAULT_STRATEGY,
4774
4774
  to: ""
4775
- }, options || {});
4775
+ }, options2 || {});
4776
4776
  var opt = this.options;
4777
4777
  if (opt.raw && opt.windowBits > 0) {
4778
4778
  opt.windowBits = -opt.windowBits;
@@ -4880,23 +4880,23 @@ var require_deflate2 = __commonJS({
4880
4880
  this.err = status;
4881
4881
  this.msg = this.strm.msg;
4882
4882
  };
4883
- function deflate(input, options) {
4884
- var deflator = new Deflate(options);
4883
+ function deflate(input, options2) {
4884
+ var deflator = new Deflate(options2);
4885
4885
  deflator.push(input, true);
4886
4886
  if (deflator.err) {
4887
4887
  throw deflator.msg || msg[deflator.err];
4888
4888
  }
4889
4889
  return deflator.result;
4890
4890
  }
4891
- function deflateRaw(input, options) {
4892
- options = options || {};
4893
- options.raw = true;
4894
- return deflate(input, options);
4891
+ function deflateRaw(input, options2) {
4892
+ options2 = options2 || {};
4893
+ options2.raw = true;
4894
+ return deflate(input, options2);
4895
4895
  }
4896
- function gzip(input, options) {
4897
- options = options || {};
4898
- options.gzip = true;
4899
- return deflate(input, options);
4896
+ function gzip(input, options2) {
4897
+ options2 = options2 || {};
4898
+ options2.gzip = true;
4899
+ return deflate(input, options2);
4900
4900
  }
4901
4901
  exports.Deflate = Deflate;
4902
4902
  exports.deflate = deflate;
@@ -6759,13 +6759,13 @@ var require_inflate2 = __commonJS({
6759
6759
  var ZStream = require_zstream();
6760
6760
  var GZheader = require_gzheader();
6761
6761
  var toString = Object.prototype.toString;
6762
- function Inflate(options) {
6763
- if (!(this instanceof Inflate)) return new Inflate(options);
6762
+ function Inflate(options2) {
6763
+ if (!(this instanceof Inflate)) return new Inflate(options2);
6764
6764
  this.options = utils.assign({
6765
6765
  chunkSize: 16384,
6766
6766
  windowBits: 0,
6767
6767
  to: ""
6768
- }, options || {});
6768
+ }, options2 || {});
6769
6769
  var opt = this.options;
6770
6770
  if (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) {
6771
6771
  opt.windowBits = -opt.windowBits;
@@ -6773,7 +6773,7 @@ var require_inflate2 = __commonJS({
6773
6773
  opt.windowBits = -15;
6774
6774
  }
6775
6775
  }
6776
- if (opt.windowBits >= 0 && opt.windowBits < 16 && !(options && options.windowBits)) {
6776
+ if (opt.windowBits >= 0 && opt.windowBits < 16 && !(options2 && options2.windowBits)) {
6777
6777
  opt.windowBits += 32;
6778
6778
  }
6779
6779
  if (opt.windowBits > 15 && opt.windowBits < 48) {
@@ -6901,18 +6901,18 @@ var require_inflate2 = __commonJS({
6901
6901
  this.err = status;
6902
6902
  this.msg = this.strm.msg;
6903
6903
  };
6904
- function inflate(input, options) {
6905
- var inflator = new Inflate(options);
6904
+ function inflate(input, options2) {
6905
+ var inflator = new Inflate(options2);
6906
6906
  inflator.push(input, true);
6907
6907
  if (inflator.err) {
6908
6908
  throw inflator.msg || msg[inflator.err];
6909
6909
  }
6910
6910
  return inflator.result;
6911
6911
  }
6912
- function inflateRaw(input, options) {
6913
- options = options || {};
6914
- options.raw = true;
6915
- return inflate(input, options);
6912
+ function inflateRaw(input, options2) {
6913
+ options2 = options2 || {};
6914
+ options2.raw = true;
6915
+ return inflate(input, options2);
6916
6916
  }
6917
6917
  exports.Inflate = Inflate;
6918
6918
  exports.inflate = inflate;
@@ -10045,7 +10045,7 @@ function inflateZlibSync(input) {
10045
10045
  bitCnt -= n;
10046
10046
  return v;
10047
10047
  };
10048
- const decode2 = (h) => {
10048
+ const decode3 = (h) => {
10049
10049
  let code = 0;
10050
10050
  let first = 0;
10051
10051
  let index = 0;
@@ -10103,7 +10103,7 @@ function inflateZlibSync(input) {
10103
10103
  const clh = buildHuffman(cl, 19);
10104
10104
  const lens = new Uint8Array(hlit + hdist);
10105
10105
  for (let i = 0; i < hlit + hdist; ) {
10106
- const sym = decode2(clh);
10106
+ const sym = decode3(clh);
10107
10107
  if (sym < 16) {
10108
10108
  lens[i++] = sym;
10109
10109
  } else if (sym === 16) {
@@ -10123,7 +10123,7 @@ function inflateZlibSync(input) {
10123
10123
  throw new Error("inflate: invalid block type");
10124
10124
  }
10125
10125
  for (; ; ) {
10126
- const sym = decode2(lit);
10126
+ const sym = decode3(lit);
10127
10127
  if (sym < 256) {
10128
10128
  need(1);
10129
10129
  out[outLen++] = sym;
@@ -10132,7 +10132,7 @@ function inflateZlibSync(input) {
10132
10132
  } else {
10133
10133
  const li = sym - 257;
10134
10134
  const len = LENGTH_BASE[li] + bits(LENGTH_EXTRA[li]);
10135
- const di = decode2(dist);
10135
+ const di = decode3(dist);
10136
10136
  const d = DIST_BASE[di] + bits(DIST_EXTRA[di]);
10137
10137
  need(len);
10138
10138
  for (let k = 0; k < len; k++) {
@@ -10312,15 +10312,74 @@ async function decodePng(bytes) {
10312
10312
  return { width, height, data: out };
10313
10313
  }
10314
10314
 
10315
- // src/image-codec-fallback.ts
10315
+ // src/jpeg-decoder.ts
10316
10316
  var import_jpeg_js = __toESM(require_jpeg_js());
10317
+ var options = { useTArray: true, formatAsRGBA: true, maxResolutionInMP: 67.108864, maxMemoryUsageInMB: 512 };
10318
+ function decodeJpegPixels(bytes, colorTransform) {
10319
+ let sampling = [];
10320
+ let adobeTransform;
10321
+ let adobeOffset = -1;
10322
+ for (let position = 2; position + 4 <= bytes.length; ) {
10323
+ if (bytes[position] !== 255) break;
10324
+ if (bytes[position + 1] === 255) {
10325
+ position++;
10326
+ continue;
10327
+ }
10328
+ const marker = bytes[position + 1];
10329
+ if (marker === 218 || marker === 217) break;
10330
+ const length = bytes[position + 2] * 256 + bytes[position + 3];
10331
+ if (length < 2 || position + length + 2 > bytes.length) break;
10332
+ const start = position + 4;
10333
+ if ([192, 193, 194].includes(marker) && length >= 8) {
10334
+ const count = bytes[start + 5];
10335
+ if (length >= 8 + 3 * count) sampling = Array.from({ length: count }, (_, i) => ({ id: bytes[start + 6 + i * 3], h: bytes[start + 7 + i * 3] >> 4, v: bytes[start + 7 + i * 3] & 15 }));
10336
+ }
10337
+ if (marker === 238 && length >= 14 && String.fromCharCode(...bytes.subarray(start, start + 5)) === "Adobe") {
10338
+ adobeOffset = start + 11;
10339
+ adobeTransform = bytes[adobeOffset];
10340
+ }
10341
+ position += length + 2;
10342
+ }
10343
+ const transform = colorTransform ?? (adobeTransform !== void 0 ? adobeTransform !== 0 : !sampling.every((component, i) => component.id === [82, 71, 66][i]));
10344
+ if (sampling.length !== 3 || !transform) return (0, import_jpeg_js.decode)(bytes, { ...options, colorTransform: sampling.length === 3 ? transform : colorTransform });
10345
+ const maxH = Math.max(...sampling.map((c) => c.h)), maxV = Math.max(...sampling.map((c) => c.v));
10346
+ if (sampling.some((c) => !c.h || !c.v || maxH % c.h || maxV % c.v)) return (0, import_jpeg_js.decode)(bytes, { ...options, colorTransform });
10347
+ let encoded = bytes;
10348
+ if (adobeTransform) {
10349
+ encoded = bytes.slice();
10350
+ encoded[adobeOffset] = 0;
10351
+ }
10352
+ const raw = (0, import_jpeg_js.decode)(encoded, { ...options, colorTransform: false });
10353
+ const { width, height } = raw;
10354
+ const data = new Uint8Array(raw.data.length);
10355
+ const sample2 = (x, y, channel) => {
10356
+ const sx = maxH / sampling[channel].h, sy = maxV / sampling[channel].v;
10357
+ const px = Math.max(0, Math.min(Math.ceil(width / sx) - 1, (x + 0.5) / sx - 0.5));
10358
+ const py = Math.max(0, Math.min(Math.ceil(height / sy) - 1, (y + 0.5) / sy - 0.5));
10359
+ const ix = Math.floor(px), iy = Math.floor(py), fx = px - ix, fy = py - iy;
10360
+ const at = (xx, yy) => raw.data[(Math.min(height - 1, yy * sy) * width + Math.min(width - 1, xx * sx)) * 4 + channel];
10361
+ return (1 - fy) * ((1 - fx) * at(ix, iy) + fx * at(ix + 1, iy)) + fy * ((1 - fx) * at(ix, iy + 1) + fx * at(ix + 1, iy + 1));
10362
+ };
10363
+ const byte = (value) => Math.max(0, Math.min(255, Math.round(value)));
10364
+ for (let y = 0; y < height; y++) for (let x = 0; x < width; x++) {
10365
+ const luma = sample2(x, y, 0), cb = sample2(x, y, 1) - 128, cr = sample2(x, y, 2) - 128;
10366
+ const offset = (y * width + x) * 4;
10367
+ data[offset] = byte(luma + 1.402 * cr);
10368
+ data[offset + 1] = byte(luma - 0.3441363 * cb - 0.71413636 * cr);
10369
+ data[offset + 2] = byte(luma + 1.772 * cb);
10370
+ data[offset + 3] = 255;
10371
+ }
10372
+ return { ...raw, data };
10373
+ }
10374
+
10375
+ // src/image-codec-fallback.ts
10317
10376
  var import_gifuct_js = __toESM(require_lib2());
10318
10377
  var UTIF = __toESM(require_UTIF());
10319
10378
 
10320
10379
  // src/tiff-group3.ts
10321
10380
  function normalizeGroup3(buffer, page) {
10322
- const options = Array.isArray(page.t292) ? Number(page.t292[0]) : 0;
10323
- if (!Array.isArray(page.t259) || page.t259[0] !== 3 || (options & 3) !== 0) return buffer;
10381
+ const options2 = Array.isArray(page.t292) ? Number(page.t292[0]) : 0;
10382
+ if (!Array.isArray(page.t259) || page.t259[0] !== 3 || (options2 & 3) !== 0) return buffer;
10324
10383
  const offsets = page.t273, lengths = page.t279;
10325
10384
  if (!Array.isArray(offsets) || !Array.isArray(lengths) || offsets.length !== lengths.length) return buffer;
10326
10385
  const source = new Uint8Array(buffer);
@@ -10354,16 +10413,50 @@ function normalizeGroup3(buffer, page) {
10354
10413
  return offset;
10355
10414
  });
10356
10415
  page.t279 = strips.map((strip) => strip.length);
10357
- page.t292 = [options | 1];
10416
+ page.t292 = [options2 | 1];
10358
10417
  return normalized.buffer;
10359
10418
  }
10360
10419
 
10420
+ // src/tiff-jpeg.ts
10421
+ function decodeJpegTiff(bytes, page) {
10422
+ const values = (tag2) => Array.isArray(page[tag2]) ? page[tag2].map(Number) : [];
10423
+ const first = (tag2, fallback = 0) => values(tag2)[0] ?? fallback;
10424
+ const photo = first("t262");
10425
+ if (first("t259") !== 7 || photo !== 2 && photo !== 6 || first("t277") !== 3 || first("t284", 1) !== 1 || values("t258").some((v) => v !== 8)) return null;
10426
+ const width = first("t256"), height = first("t257");
10427
+ const tiled = !!page.t322;
10428
+ const blockWidth = tiled ? first("t322") : width;
10429
+ const blockHeight = tiled ? first("t323") : first("t278", height);
10430
+ if (!Number.isInteger(blockWidth) || !Number.isInteger(blockHeight) || blockWidth <= 0 || blockHeight <= 0 || blockWidth > 8192 || blockHeight > 8192) throw new Error("Invalid TIFF JPEG block");
10431
+ const offsets = values(tiled ? "t324" : "t273");
10432
+ const lengths = values(tiled ? "t325" : "t279");
10433
+ const columns = Math.ceil(width / blockWidth), rows = Math.ceil(height / blockHeight);
10434
+ if (offsets.length !== columns * rows || lengths.length !== offsets.length) throw new Error("Invalid TIFF JPEG offsets");
10435
+ const tables = page.t347 instanceof Uint8Array ? page.t347 : new Uint8Array(values("t347"));
10436
+ const tableLength = tables.length >= 2 && tables[tables.length - 2] === 255 && tables[tables.length - 1] === 217 ? tables.length - 2 : tables.length;
10437
+ const result = new Uint8ClampedArray(width * height * 4);
10438
+ for (let block = 0; block < offsets.length; block++) {
10439
+ const offset = offsets[block], length = lengths[block];
10440
+ if (!Number.isInteger(offset) || !Number.isInteger(length) || offset < 0 || length <= 0 || offset + length > bytes.length) throw new Error("Invalid TIFF JPEG data");
10441
+ const skip = tableLength && bytes[offset] === 255 && bytes[offset + 1] === 216 ? 2 : 0;
10442
+ const jpeg = new Uint8Array(tableLength + length - skip);
10443
+ jpeg.set(tables.subarray(0, tableLength));
10444
+ jpeg.set(bytes.subarray(offset + skip, offset + length), tableLength);
10445
+ const decoded = decodeJpegPixels(jpeg, photo === 6);
10446
+ const x = block % columns * blockWidth, y = Math.floor(block / columns) * blockHeight;
10447
+ const copyWidth = Math.min(blockWidth, width - x), copyHeight = Math.min(blockHeight, height - y);
10448
+ if (decoded.width !== blockWidth || decoded.height < copyHeight || decoded.height > blockHeight) throw new Error("Invalid TIFF JPEG dimensions");
10449
+ for (let row = 0; row < copyHeight; row++) result.set(decoded.data.subarray(row * decoded.width * 4, (row * decoded.width + copyWidth) * 4), ((y + row) * width + x) * 4);
10450
+ }
10451
+ return result;
10452
+ }
10453
+
10361
10454
  // src/image-codec-fallback.ts
10362
10455
  var validSize = (w, h) => Number.isInteger(w) && Number.isInteger(h) && w > 0 && h > 0 && w <= 8192 && h <= 8192;
10363
10456
  function decodeImageCodecFallback(bytes) {
10364
10457
  try {
10365
10458
  if (bytes[0] === 255 && bytes[1] === 216) {
10366
- const p = (0, import_jpeg_js.decode)(bytes, { useTArray: true, formatAsRGBA: true, maxResolutionInMP: 67.108864, maxMemoryUsageInMB: 512 });
10459
+ const p = decodeJpegPixels(bytes);
10367
10460
  return validSize(p.width, p.height) ? { ...p, data: new Uint8ClampedArray(p.data) } : null;
10368
10461
  }
10369
10462
  if (bytes.length >= 13 && String.fromCharCode(...bytes.subarray(0, 6)).match(/^GIF8[79]a$/)) {
@@ -10397,6 +10490,9 @@ function decodeImageCodecFallback(bytes) {
10397
10490
  const pages = UTIF.decode(buffer);
10398
10491
  const page = pages.find((p) => p.t256 && p.t257);
10399
10492
  if (!page || !Array.isArray(page.t256) || !Array.isArray(page.t257) || !validSize(Number(page.t256[0]), Number(page.t257[0]))) return null;
10493
+ const jpeg = decodeJpegTiff(new Uint8Array(buffer), page);
10494
+ if (jpeg) return { data: jpeg, width: Number(page.t256[0]), height: Number(page.t257[0]) };
10495
+ if (Array.isArray(page.t259) && page.t259[0] === 32946) page.t259 = [8];
10400
10496
  UTIF.decodeImage(normalizeGroup3(buffer, page), page);
10401
10497
  const width = page.width, height = page.height;
10402
10498
  if (!validSize(width, height)) return null;
@@ -14314,13 +14410,13 @@ function writeJsx(node, depth, out, rootSpread) {
14314
14410
  }
14315
14411
  out.push(`${pad}</${node.tag}>`);
14316
14412
  }
14317
- function svgTreeToJsx(node, options = {}) {
14318
- const name = options.componentName ?? "Metafile";
14413
+ function svgTreeToJsx(node, options2 = {}) {
14414
+ const name = options2.componentName ?? "Metafile";
14319
14415
  if (!/^[A-Z][A-Za-z0-9_$]*$/.test(name)) {
14320
14416
  throw new TypeError(`svgTreeToJsx: componentName must be a PascalCase identifier, got ${JSON.stringify(name)}`);
14321
14417
  }
14322
- const ts = options.typescript ?? true;
14323
- const spread = options.spreadProps ?? true;
14418
+ const ts = options2.typescript ?? true;
14419
+ const spread = options2.spreadProps ?? true;
14324
14420
  const body = [];
14325
14421
  writeJsx(node, 2, body, spread);
14326
14422
  const params = spread ? ts ? "props: SVGProps<SVGSVGElement>" : "props" : "";
@@ -15639,7 +15735,7 @@ function hslToRgb(h, s, l) {
15639
15735
  return [r + m, g + m, b + m];
15640
15736
  }
15641
15737
  var HUE_SEXTANT = 43;
15642
- var HUE_CIRCLE = 6 * HUE_SEXTANT;
15738
+ var HUE_CIRCLE = 255;
15643
15739
  function gdipHue(r, g, b) {
15644
15740
  const max = Math.max(r, g, b);
15645
15741
  const d = max - Math.min(r, g, b);
@@ -15648,13 +15744,14 @@ function gdipHue(r, g, b) {
15648
15744
  return f(g - b);
15649
15745
  }
15650
15746
  if (max === b && b !== r) {
15651
- return r >= g ? 172 + f(r - g) : 171 - f(g - r);
15747
+ return r >= g ? 170 + f(r - g) : 127 + f(b - g);
15652
15748
  }
15653
15749
  if (max === g) {
15654
- return b >= r ? 87 + f(b - r) : 86 - f(r - b);
15750
+ return b >= r ? 86 + f(b - r) : 43 + f(g - r);
15655
15751
  }
15656
15752
  const t = f(b - g);
15657
- return (256 - t - (t >= 40 ? 1 : 0)) % 256;
15753
+ const q = (256 - t - (t >= 40 ? 1 : 0)) % 256;
15754
+ return q - Math.floor((q + 42) / 86);
15658
15755
  }
15659
15756
  function applyHueSaturationLightness(src, hue, saturation, lightness2) {
15660
15757
  const out = new Uint8ClampedArray(src);
@@ -15672,11 +15769,12 @@ function applyHueSaturationLightness(src, hue, saturation, lightness2) {
15672
15769
  continue;
15673
15770
  }
15674
15771
  const sum = max + min;
15675
- const s = clamp((max - min) / (sum <= 255 ? sum : 510 - sum) * sMul, 0, 1);
15772
+ const s = Math.fround(clamp((max - min) / (sum <= 255 ? sum : 510 - sum) * sMul, 0, 1));
15676
15773
  const hi = l <= 127 ? l * (1 + s) : l + s * (255 - l);
15677
15774
  const m1 = l <= 127 ? 2 * l - Math.trunc(hi) : Math.round(2 * l - hi);
15678
15775
  const m2 = 2 * l - m1;
15679
- const q = ((gdipHue(r, g, b) + shift) % HUE_CIRCLE + HUE_CIRCLE) % HUE_CIRCLE;
15776
+ const index = ((gdipHue(r, g, b) + shift) % HUE_CIRCLE + HUE_CIRCLE) % HUE_CIRCLE;
15777
+ const q = index + Math.floor((index + 41) / 85);
15680
15778
  const sextant = Math.min(5, Math.floor(q / HUE_SEXTANT));
15681
15779
  const f = (q - sextant * HUE_SEXTANT) / HUE_SEXTANT;
15682
15780
  const up = Math.trunc(m1 + (m2 - m1) * f);
@@ -18672,11 +18770,11 @@ function capFigures(path, closeAll) {
18672
18770
  }, [1, 0, 0, 1, 0, 0]);
18673
18771
  return closeAll ? figures.map((f) => ({ ...f, closed: true })) : figures;
18674
18772
  }
18675
- function customCapGeometry(figures, width, start, end, options = {}) {
18773
+ function customCapGeometry(figures, width, start, end, options2 = {}) {
18676
18774
  const out = [];
18677
18775
  const capped = [];
18678
18776
  const polygons = [];
18679
- const minFill = options.minFillScale ?? 2;
18777
+ const minFill = options2.minFillScale ?? 2;
18680
18778
  for (const fig of figures) {
18681
18779
  if (fig.closed || !start && !end) {
18682
18780
  out.push(fig);
@@ -18729,7 +18827,7 @@ function customCapGeometry(figures, width, start, end, options = {}) {
18729
18827
  const pen = {
18730
18828
  // GDI+'s widener never makes an outline thinner than one device pixel.
18731
18829
  half: Math.max(ws, 1) / 2,
18732
- join: (options.widenJoin ?? ((j) => j))(cap.strokeJoin),
18830
+ join: (options2.widenJoin ?? ((j) => j))(cap.strokeJoin),
18733
18831
  miterLimit: 10,
18734
18832
  startCap: cap.strokeStartCap,
18735
18833
  endCap: cap.strokeEndCap,
@@ -18739,7 +18837,7 @@ function customCapGeometry(figures, width, start, end, options = {}) {
18739
18837
  compound: null,
18740
18838
  inset: false
18741
18839
  };
18742
- polygons.push(...(options.widen ?? widenFigures)(capFigures(placed, false), pen).map((q) => q.reverse()));
18840
+ polygons.push(...(options2.widen ?? widenFigures)(capFigures(placed, false), pen).map((q) => q.reverse()));
18743
18841
  }
18744
18842
  };
18745
18843
  if (start) {
@@ -20454,7 +20552,7 @@ var BLEND_MODES = /* @__PURE__ */ new Set([
20454
20552
  "luminosity"
20455
20553
  ]);
20456
20554
  var SvgContext = class {
20457
- constructor(width, height, options = {}) {
20555
+ constructor(width, height, options2 = {}) {
20458
20556
  this.nextId = 0;
20459
20557
  this.stack = [];
20460
20558
  /** The current path, in DEVICE space (see `canvas-path.ts`). */
@@ -20465,9 +20563,9 @@ var SvgContext = class {
20465
20563
  this.group = null;
20466
20564
  this.images = [];
20467
20565
  this.canvas = { width, height, svgContext: this };
20468
- this.shadow = options.shadow ?? null;
20469
- this.imageResampling = options.imageResampling ?? "renderer";
20470
- this.idPrefix = options.idPrefix ?? "emf-";
20566
+ this.shadow = options2.shadow ?? null;
20567
+ this.imageResampling = options2.imageResampling ?? "renderer";
20568
+ this.idPrefix = options2.idPrefix ?? "emf-";
20471
20569
  this.state = {
20472
20570
  transform: [...IDENTITY3],
20473
20571
  fillStyle: "#000000",
@@ -21470,7 +21568,7 @@ var SvgContext = class {
21470
21568
  * Encodes every pending raster payload and returns the finished `<svg>`
21471
21569
  * tree. Call once, after replay (and deferred images) are complete.
21472
21570
  */
21473
- async toTree(options = {}) {
21571
+ async toTree(options2 = {}) {
21474
21572
  const cache2 = /* @__PURE__ */ new Map();
21475
21573
  for (const img of this.images) {
21476
21574
  let url = cache2.get(img.payload);
@@ -21482,7 +21580,7 @@ var SvgContext = class {
21482
21580
  }
21483
21581
  const { width, height } = this.canvas;
21484
21582
  const attrs = { xmlns: "http://www.w3.org/2000/svg" };
21485
- if (options.includeSize ?? true) {
21583
+ if (options2.includeSize ?? true) {
21486
21584
  attrs.width = width;
21487
21585
  attrs.height = height;
21488
21586
  }
@@ -32307,12 +32405,12 @@ function drawWithFontEngine(rCtx, offset, dataOff, nChars, offString, viewEnd) {
32307
32405
  if (!fonts) {
32308
32406
  return false;
32309
32407
  }
32310
- const options = view.getUint32(dataOff + 44, true);
32408
+ const options2 = view.getUint32(dataOff + 44, true);
32311
32409
  const codes = [];
32312
32410
  for (let i = 0; i < nChars; i++) {
32313
32411
  codes.push(view.getUint16(offset + offString + i * 2, true));
32314
32412
  }
32315
- const pdy = (options & ETO_PDY) !== 0;
32413
+ const pdy = (options2 & ETO_PDY) !== 0;
32316
32414
  const raw = readDxArray(view, offset, dataOff, pdy ? nChars * 2 : nChars, viewEnd);
32317
32415
  let dx = raw;
32318
32416
  let dy = null;
@@ -32326,10 +32424,10 @@ function drawWithFontEngine(rCtx, offset, dataOff, nChars, offString, viewEnd) {
32326
32424
  }
32327
32425
  const adv = drawGdiTextCall(ctx, fonts, state, {
32328
32426
  codes,
32329
- glyphIndices: (options & ETO_GLYPH_INDEX) !== 0,
32427
+ glyphIndices: (options2 & ETO_GLYPH_INDEX) !== 0,
32330
32428
  x: view.getInt32(dataOff + 28, true),
32331
32429
  y: view.getInt32(dataOff + 32, true),
32332
- options,
32430
+ options: options2,
32333
32431
  rect: {
32334
32432
  left: view.getInt32(dataOff + 48, true),
32335
32433
  top: view.getInt32(dataOff + 52, true),
@@ -32471,7 +32569,7 @@ function handleExtTextOutW(rCtx, offset, dataOff, recSize) {
32471
32569
  }
32472
32570
  return true;
32473
32571
  }
32474
- function drawTextCall(rCtx, x, y, codes, options, rect, dx) {
32572
+ function drawTextCall(rCtx, x, y, codes, options2, rect, dx) {
32475
32573
  const n = codes.length;
32476
32574
  const offString = 76;
32477
32575
  const offDx = offString + n * 2 + 3 & -4;
@@ -32480,7 +32578,7 @@ function drawTextCall(rCtx, x, y, codes, options, rect, dx) {
32480
32578
  const view = new DataView(new ArrayBuffer(size));
32481
32579
  view.setUint32(44, n, true);
32482
32580
  view.setUint32(48, offString, true);
32483
- view.setUint32(52, options, true);
32581
+ view.setUint32(52, options2, true);
32484
32582
  view.setInt32(36, x, true);
32485
32583
  view.setInt32(40, y, true);
32486
32584
  view.setInt32(56, rect[0], true);
@@ -32524,7 +32622,7 @@ function handlePolyText(rCtx, offset, dataOff, recSize, wide) {
32524
32622
  const e = arrayStart + i * 40;
32525
32623
  const x = view.getInt32(e, true), y = view.getInt32(e + 4, true);
32526
32624
  const n = view.getUint32(e + 8, true), offString = view.getUint32(e + 12, true);
32527
- const options = view.getUint32(e + 16, true);
32625
+ const options2 = view.getUint32(e + 16, true);
32528
32626
  const rect = [view.getInt32(e + 20, true), view.getInt32(e + 24, true), view.getInt32(e + 28, true), view.getInt32(e + 32, true)];
32529
32627
  const offDx = view.getUint32(e + 36, true);
32530
32628
  const unit = wide ? 2 : 1;
@@ -32532,13 +32630,13 @@ function handlePolyText(rCtx, offset, dataOff, recSize, wide) {
32532
32630
  const ansi = wide ? null : readAnsiRecord(view, offset + offString, n, charSet);
32533
32631
  const codes = wide ? Array.from({ length: n }, (_, j) => view.getUint16(offset + offString + j * 2, true)) : ansi.codes;
32534
32632
  let dx = null;
32535
- const pdy = (options & ETO_PDY) !== 0;
32633
+ const pdy = (options2 & ETO_PDY) !== 0;
32536
32634
  const dxCount = n * (pdy ? 2 : 1);
32537
32635
  if (offDx && offDx <= end - offset && dxCount <= Math.floor((end - (offset + offDx)) / 4)) {
32538
32636
  dx = Array.from({ length: dxCount }, (_, j) => view.getInt32(offset + offDx + j * 4, true));
32539
32637
  if (!wide) dx = collapseAnsiDx(dx, ansi.byteLengths, pdy);
32540
32638
  }
32541
- drawTextCall(rCtx, x, y, codes, options, rect, dx);
32639
+ drawTextCall(rCtx, x, y, codes, options2, rect, dx);
32542
32640
  }
32543
32641
  return true;
32544
32642
  }
@@ -32547,13 +32645,13 @@ function handleSmallTextOut(rCtx, offset, dataOff, recSize) {
32547
32645
  const end = Math.min(view.byteLength, offset + recSize);
32548
32646
  if (recSize < 36) return true;
32549
32647
  const x = view.getInt32(dataOff, true), y = view.getInt32(dataOff + 4, true);
32550
- const n = view.getUint32(dataOff + 8, true), options = view.getUint32(dataOff + 12, true);
32551
- const small = (options & 512) !== 0, noRect = (options & 256) !== 0;
32648
+ const n = view.getUint32(dataOff + 8, true), options2 = view.getUint32(dataOff + 12, true);
32649
+ const small = (options2 & 512) !== 0, noRect = (options2 & 256) !== 0;
32552
32650
  const base = dataOff + 28 + (noRect ? 0 : 16);
32553
32651
  if (base > end || n > Math.floor((end - base) / (small ? 1 : 2))) return true;
32554
32652
  const rect = noRect ? [0, 0, 0, 0] : [view.getInt32(dataOff + 28, true), view.getInt32(dataOff + 32, true), view.getInt32(dataOff + 36, true), view.getInt32(dataOff + 40, true)];
32555
32653
  const codes = small ? Array.from({ length: n }, (_, i) => view.getUint8(base + i)) : Array.from({ length: n }, (_, i) => view.getUint16(base + i * 2, true));
32556
- drawTextCall(rCtx, x, y, codes, options, rect, null);
32654
+ drawTextCall(rCtx, x, y, codes, options2, rect, null);
32557
32655
  return true;
32558
32656
  }
32559
32657
  function handleEmfGdiDrawTextRecord(rCtx, recType, offset, dataOff, recSize) {
@@ -32567,20 +32665,20 @@ function handleEmfGdiDrawTextRecord(rCtx, recType, offset, dataOff, recSize) {
32567
32665
  const end = Math.min(view.byteLength, offset + recSize);
32568
32666
  if (recSize < 76) return true;
32569
32667
  const x = view.getInt32(dataOff + 28, true), y = view.getInt32(dataOff + 32, true);
32570
- const n = view.getUint32(dataOff + 36, true), strOff = view.getUint32(dataOff + 40, true), options = view.getUint32(dataOff + 44, true);
32668
+ const n = view.getUint32(dataOff + 36, true), strOff = view.getUint32(dataOff + 40, true), options2 = view.getUint32(dataOff + 44, true);
32571
32669
  if (!strOff || strOff > end - offset) return true;
32572
32670
  if (n > end - (offset + strOff)) return true;
32573
32671
  const ansi = readAnsiRecord(view, offset + strOff, n, state.fontDetails?.charSet ?? 1);
32574
32672
  const rect = [view.getInt32(dataOff + 48, true), view.getInt32(dataOff + 52, true), view.getInt32(dataOff + 56, true), view.getInt32(dataOff + 60, true)];
32575
32673
  const offDx = view.getUint32(dataOff + 64, true);
32576
32674
  let dx = null;
32577
- const pdy = (options & ETO_PDY) !== 0;
32675
+ const pdy = (options2 & ETO_PDY) !== 0;
32578
32676
  const dxCount = n * (pdy ? 2 : 1);
32579
32677
  if (offDx && offDx <= end - offset && dxCount <= Math.floor((end - (offset + offDx)) / 4)) {
32580
32678
  dx = Array.from({ length: dxCount }, (_, i) => view.getInt32(offset + offDx + i * 4, true));
32581
32679
  dx = collapseAnsiDx(dx, ansi.byteLengths, pdy);
32582
32680
  }
32583
- drawTextCall(rCtx, x, y, ansi.codes, options, rect, dx);
32681
+ drawTextCall(rCtx, x, y, ansi.codes, options2, rect, dx);
32584
32682
  return true;
32585
32683
  }
32586
32684
  return false;
@@ -33561,8 +33659,8 @@ function widenBracketPath(rCtx) {
33561
33659
  if (rCtx.inPath || !rCtx.rasterPath || (state.penStyle & 15) === 5) {
33562
33660
  return;
33563
33661
  }
33564
- const options = penIsCosmetic(rCtx) ? { width: 16, cap: "round", join: "round", miterLimit: state.miterLimit ?? 10 } : penWidenOptions(rCtx);
33565
- const polys = widenPath(rCtx.rasterPath, options);
33662
+ const options2 = penIsCosmetic(rCtx) ? { width: 16, cap: "round", join: "round", miterLimit: state.miterLimit ?? 10 } : penWidenOptions(rCtx);
33663
+ const polys = widenPath(rCtx.rasterPath, options2);
33566
33664
  const path = new GdiRasterPath();
33567
33665
  for (const poly of polys) {
33568
33666
  if (poly.length < 4) {
@@ -36343,7 +36441,7 @@ function replayEmfRecords(view, ctx, bounds, canvasW, canvasH, dpiScale = 1, rep
36343
36441
  }
36344
36442
  return allDeferredImages;
36345
36443
  }
36346
- function replayNestedEmf(bytes, ctx, canvasW, canvasH, toCanvas, options) {
36444
+ function replayNestedEmf(bytes, ctx, canvasW, canvasH, toCanvas, options2) {
36347
36445
  const view = new DataView(bytes);
36348
36446
  const header = parseEmfHeader(view);
36349
36447
  if (!header) {
@@ -36354,11 +36452,11 @@ function replayNestedEmf(bytes, ctx, canvasW, canvasH, toCanvas, options) {
36354
36452
  const left = -e / a;
36355
36453
  const top = -f / d;
36356
36454
  const bounds2 = { left, top, right: left + canvasW / a, bottom: top + canvasH / d };
36357
- return replayEmfRecords(view, ctx, bounds2, canvasW, canvasH, 1, options);
36455
+ return replayEmfRecords(view, ctx, bounds2, canvasW, canvasH, 1, options2);
36358
36456
  }
36359
36457
  const bounds = { left: 0, top: 0, right: canvasW, bottom: canvasH };
36360
36458
  return replayEmfRecords(view, ctx, bounds, canvasW, canvasH, 1, {
36361
- ...options,
36459
+ ...options2,
36362
36460
  plusBaseTransform: toCanvas,
36363
36461
  gdiDrawing: false
36364
36462
  });
@@ -37902,8 +38000,8 @@ function wmfExtTextOut(p, dataOff, recEnd) {
37902
38000
  const y = view.getInt16(dataOff, true);
37903
38001
  const x = view.getInt16(dataOff + 2, true);
37904
38002
  const n = view.getInt16(dataOff + 4, true);
37905
- const options = view.getUint16(dataOff + 6, true);
37906
- const hasRect = (options & (ETO_OPAQUE | ETO_CLIPPED)) !== 0;
38003
+ const options2 = view.getUint16(dataOff + 6, true);
38004
+ const hasRect = (options2 & (ETO_OPAQUE | ETO_CLIPPED)) !== 0;
37907
38005
  const strOff = dataOff + 8 + (hasRect ? 8 : 0);
37908
38006
  const rect = hasRect && dataOff + 16 <= recEnd ? [view.getInt16(dataOff + 8, true), view.getInt16(dataOff + 10, true), view.getInt16(dataOff + 12, true), view.getInt16(dataOff + 14, true)] : null;
37909
38007
  const count = Math.max(0, n);
@@ -37923,12 +38021,12 @@ function wmfExtTextOut(p, dataOff, recEnd) {
37923
38021
  }
37924
38022
  }
37925
38023
  if (count === 0) {
37926
- if (rect && options & ETO_OPAQUE) {
37927
- playText(p, { x, y, bytes: [32], options, rect, dx: [0] });
38024
+ if (rect && options2 & ETO_OPAQUE) {
38025
+ playText(p, { x, y, bytes: [32], options: options2, rect, dx: [0] });
37928
38026
  }
37929
38027
  return;
37930
38028
  }
37931
- playText(p, { x, y, bytes, options, rect, dx });
38029
+ playText(p, { x, y, bytes, options: options2, rect, dx });
37932
38030
  }
37933
38031
 
37934
38032
  // src/wmf-replay.ts
@@ -38398,7 +38496,7 @@ function replayWmfRecords(view, ctx, header, canvasW, canvasH, replayOptions = {
38398
38496
 
38399
38497
  // src/emf-converter.ts
38400
38498
  var MAX_METAFILE_RECURSION = 3;
38401
- async function replayMetafile(buffer, options, createSurface) {
38499
+ async function replayMetafile(buffer, options2, createSurface) {
38402
38500
  emfLog(`replayMetafile: input buffer ${buffer.byteLength} bytes`);
38403
38501
  if (buffer.byteLength >= 16) {
38404
38502
  const hdrBytes = new Uint8Array(buffer, 0, 16);
@@ -38406,7 +38504,7 @@ async function replayMetafile(buffer, options, createSurface) {
38406
38504
  `replayMetafile: first 16 bytes: [${Array.from(hdrBytes).map((b) => b.toString(16).padStart(2, "0")).join(" ")}]`
38407
38505
  );
38408
38506
  }
38409
- const opts = options ?? {};
38507
+ const opts = options2 ?? {};
38410
38508
  const dpiScale = opts.dpiScale ?? DEFAULT_DPI_SCALE;
38411
38509
  let view = new DataView(buffer);
38412
38510
  let emfHeader = null;
@@ -38612,12 +38710,12 @@ async function processDeferredImages(ctx, deferredImages, recursionDepth) {
38612
38710
  ctx.setTransform(1, 0, 0, 1, 0, 0);
38613
38711
  return complete;
38614
38712
  }
38615
- async function convertMetafileToDataUrl(buffer, options, recursionDepth = 0) {
38713
+ async function convertMetafileToDataUrl(buffer, options2, recursionDepth = 0) {
38616
38714
  await ensureNodeCanvasModule();
38617
38715
  if (recursionDepth > MAX_METAFILE_RECURSION) {
38618
38716
  return null;
38619
38717
  }
38620
- const opts = { ...options, gdiAntialias: options?.gdiAntialias ?? false };
38718
+ const opts = { ...options2, gdiAntialias: options2?.gdiAntialias ?? false };
38621
38719
  let canvas = null;
38622
38720
  const result = await replayMetafile(buffer, opts, (w, h) => {
38623
38721
  const setup = createCanvas(
@@ -38686,7 +38784,7 @@ async function resampleExact(bytes, spec, surface) {
38686
38784
  }
38687
38785
  return resampleImage(pixels.data, pixels.width, pixels.height, spec, { w: surface.width, h: surface.height });
38688
38786
  }
38689
- async function processDeferredImagesSvg(svg, deferredImages, options, recursionDepth) {
38787
+ async function processDeferredImagesSvg(svg, deferredImages, options2, recursionDepth) {
38690
38788
  for (let idx = 0; idx < deferredImages.length; idx++) {
38691
38789
  let img = deferredImages[idx];
38692
38790
  try {
@@ -38709,7 +38807,7 @@ async function processDeferredImagesSvg(svg, deferredImages, options, recursionD
38709
38807
  }
38710
38808
  const nested = await convertMetafileToSvgTree(
38711
38809
  bytes,
38712
- { ...options, includeSize: true, idPrefix: void 0 },
38810
+ { ...options2, includeSize: true, idPrefix: void 0 },
38713
38811
  recursionDepth + 1
38714
38812
  );
38715
38813
  if (nested) {
@@ -38746,7 +38844,7 @@ async function processDeferredImagesSvg(svg, deferredImages, options, recursionD
38746
38844
  continue;
38747
38845
  }
38748
38846
  const slot = img.svgSlot ?? svg.reserveSlot();
38749
- if (img.resample && options.imageResampling === "exact" && !img.isMetafile) {
38847
+ if (img.resample && options2.imageResampling === "exact" && !img.isMetafile) {
38750
38848
  const block = await resampleExact(bytes, img.resample, svg.canvas);
38751
38849
  if (block) {
38752
38850
  svg.fillSlot(slot, { kind: "rgba", data: block.rgba, width: block.w, height: block.h }, [1, 0, 0, 1, 0, 0], block.x, block.y, block.w, block.h);
@@ -38766,16 +38864,16 @@ async function processDeferredImagesSvg(svg, deferredImages, options, recursionD
38766
38864
  }
38767
38865
  }
38768
38866
  }
38769
- async function convertMetafileToSvgTree(buffer, options, recursionDepth = 0) {
38770
- const svg = await replayToSvgContext(buffer, options, recursionDepth);
38771
- return svg ? svg.toTree({ includeSize: options?.includeSize }) : null;
38867
+ async function convertMetafileToSvgTree(buffer, options2, recursionDepth = 0) {
38868
+ const svg = await replayToSvgContext(buffer, options2, recursionDepth);
38869
+ return svg ? svg.toTree({ includeSize: options2?.includeSize }) : null;
38772
38870
  }
38773
- async function replayToSvgContext(buffer, options, recursionDepth = 0) {
38871
+ async function replayToSvgContext(buffer, options2, recursionDepth = 0) {
38774
38872
  await ensureNodeCanvasModule();
38775
38873
  if (recursionDepth > MAX_METAFILE_RECURSION) {
38776
38874
  return null;
38777
38875
  }
38778
- const opts = options ?? {};
38876
+ const opts = options2 ?? {};
38779
38877
  const dpiScale = opts.dpiScale ?? DEFAULT_DPI_SCALE;
38780
38878
  const idPrefix = opts.idPrefix ?? `emf${++svgDocumentCounter}-`;
38781
38879
  let svg = null;
@@ -38792,12 +38890,12 @@ async function replayToSvgContext(buffer, options, recursionDepth = 0) {
38792
38890
  await processDeferredImagesSvg(target, result.deferredImages, opts, recursionDepth);
38793
38891
  return target;
38794
38892
  }
38795
- async function convertMetafileToSvg(buffer, options) {
38796
- const tree = await convertMetafileToSvgTree(buffer, options);
38893
+ async function convertMetafileToSvg(buffer, options2) {
38894
+ const tree = await convertMetafileToSvgTree(buffer, options2);
38797
38895
  return tree ? svgTreeToString(tree) : null;
38798
38896
  }
38799
- async function convertMetafileToSvgDataUrl(buffer, options) {
38800
- const markup = await convertMetafileToSvg(buffer, options);
38897
+ async function convertMetafileToSvgDataUrl(buffer, options2) {
38898
+ const markup = await convertMetafileToSvg(buffer, options2);
38801
38899
  return markup ? svgMarkupToDataUrl(markup) : null;
38802
38900
  }
38803
38901