emf-converter 4.4.7 → 4.4.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1367,21 +1367,21 @@ var require_decoder = __commonJS({
1367
1367
  successiveACState = 0;
1368
1368
  }
1369
1369
  }
1370
- function decodeMcu(component2, decode3, mcu2, row, col) {
1370
+ function decodeMcu(component2, decode4, mcu2, row, col) {
1371
1371
  var mcuRow = mcu2 / mcusPerLine | 0;
1372
1372
  var mcuCol = mcu2 % mcusPerLine;
1373
1373
  var blockRow = mcuRow * component2.v + row;
1374
1374
  var blockCol = mcuCol * component2.h + col;
1375
1375
  if (component2.blocks[blockRow] === void 0 && opts.tolerantDecoding)
1376
1376
  return;
1377
- decode3(component2, component2.blocks[blockRow][blockCol]);
1377
+ decode4(component2, component2.blocks[blockRow][blockCol]);
1378
1378
  }
1379
- function decodeBlock(component2, decode3, mcu2) {
1379
+ function decodeBlock(component2, decode4, mcu2) {
1380
1380
  var blockRow = mcu2 / component2.blocksPerLine | 0;
1381
1381
  var blockCol = mcu2 % component2.blocksPerLine;
1382
1382
  if (component2.blocks[blockRow] === void 0 && opts.tolerantDecoding)
1383
1383
  return;
1384
- decode3(component2, component2.blocks[blockRow][blockCol]);
1384
+ decode4(component2, component2.blocks[blockRow][blockCol]);
1385
1385
  }
1386
1386
  var componentsLength = components.length;
1387
1387
  var component, i, j, k, n;
@@ -2102,12 +2102,12 @@ var require_decoder = __commonJS({
2102
2102
  return constructor;
2103
2103
  })();
2104
2104
  if (typeof module !== "undefined") {
2105
- module.exports = decode2;
2105
+ module.exports = decode3;
2106
2106
  } else if (typeof window !== "undefined") {
2107
2107
  window["jpeg-js"] = window["jpeg-js"] || {};
2108
- window["jpeg-js"].decode = decode2;
2108
+ window["jpeg-js"].decode = decode3;
2109
2109
  }
2110
- function decode2(jpegData, userOpts = {}) {
2110
+ function decode3(jpegData, userOpts = {}) {
2111
2111
  var defaultOpts = {
2112
2112
  // "undefined" means "Choose whether to transform colors based on the image’s color model."
2113
2113
  colorTransform: void 0,
@@ -2159,10 +2159,10 @@ var require_decoder = __commonJS({
2159
2159
  var require_jpeg_js = __commonJS({
2160
2160
  "node_modules/jpeg-js/index.js"(exports, module) {
2161
2161
  var encode2 = require_encoder();
2162
- var decode2 = require_decoder();
2162
+ var decode3 = require_decoder();
2163
2163
  module.exports = {
2164
2164
  encode: encode2,
2165
- decode: decode2
2165
+ decode: decode3
2166
2166
  };
2167
2167
  }
2168
2168
  });
@@ -4760,8 +4760,8 @@ var require_deflate2 = __commonJS({
4760
4760
  var Z_DEFAULT_COMPRESSION = -1;
4761
4761
  var Z_DEFAULT_STRATEGY = 0;
4762
4762
  var Z_DEFLATED = 8;
4763
- function Deflate(options) {
4764
- if (!(this instanceof Deflate)) return new Deflate(options);
4763
+ function Deflate(options2) {
4764
+ if (!(this instanceof Deflate)) return new Deflate(options2);
4765
4765
  this.options = utils.assign({
4766
4766
  level: Z_DEFAULT_COMPRESSION,
4767
4767
  method: Z_DEFLATED,
@@ -4770,7 +4770,7 @@ var require_deflate2 = __commonJS({
4770
4770
  memLevel: 8,
4771
4771
  strategy: Z_DEFAULT_STRATEGY,
4772
4772
  to: ""
4773
- }, options || {});
4773
+ }, options2 || {});
4774
4774
  var opt = this.options;
4775
4775
  if (opt.raw && opt.windowBits > 0) {
4776
4776
  opt.windowBits = -opt.windowBits;
@@ -4878,23 +4878,23 @@ var require_deflate2 = __commonJS({
4878
4878
  this.err = status;
4879
4879
  this.msg = this.strm.msg;
4880
4880
  };
4881
- function deflate(input, options) {
4882
- var deflator = new Deflate(options);
4881
+ function deflate(input, options2) {
4882
+ var deflator = new Deflate(options2);
4883
4883
  deflator.push(input, true);
4884
4884
  if (deflator.err) {
4885
4885
  throw deflator.msg || msg[deflator.err];
4886
4886
  }
4887
4887
  return deflator.result;
4888
4888
  }
4889
- function deflateRaw(input, options) {
4890
- options = options || {};
4891
- options.raw = true;
4892
- return deflate(input, options);
4889
+ function deflateRaw(input, options2) {
4890
+ options2 = options2 || {};
4891
+ options2.raw = true;
4892
+ return deflate(input, options2);
4893
4893
  }
4894
- function gzip(input, options) {
4895
- options = options || {};
4896
- options.gzip = true;
4897
- return deflate(input, options);
4894
+ function gzip(input, options2) {
4895
+ options2 = options2 || {};
4896
+ options2.gzip = true;
4897
+ return deflate(input, options2);
4898
4898
  }
4899
4899
  exports.Deflate = Deflate;
4900
4900
  exports.deflate = deflate;
@@ -6757,13 +6757,13 @@ var require_inflate2 = __commonJS({
6757
6757
  var ZStream = require_zstream();
6758
6758
  var GZheader = require_gzheader();
6759
6759
  var toString = Object.prototype.toString;
6760
- function Inflate(options) {
6761
- if (!(this instanceof Inflate)) return new Inflate(options);
6760
+ function Inflate(options2) {
6761
+ if (!(this instanceof Inflate)) return new Inflate(options2);
6762
6762
  this.options = utils.assign({
6763
6763
  chunkSize: 16384,
6764
6764
  windowBits: 0,
6765
6765
  to: ""
6766
- }, options || {});
6766
+ }, options2 || {});
6767
6767
  var opt = this.options;
6768
6768
  if (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) {
6769
6769
  opt.windowBits = -opt.windowBits;
@@ -6771,7 +6771,7 @@ var require_inflate2 = __commonJS({
6771
6771
  opt.windowBits = -15;
6772
6772
  }
6773
6773
  }
6774
- if (opt.windowBits >= 0 && opt.windowBits < 16 && !(options && options.windowBits)) {
6774
+ if (opt.windowBits >= 0 && opt.windowBits < 16 && !(options2 && options2.windowBits)) {
6775
6775
  opt.windowBits += 32;
6776
6776
  }
6777
6777
  if (opt.windowBits > 15 && opt.windowBits < 48) {
@@ -6899,18 +6899,18 @@ var require_inflate2 = __commonJS({
6899
6899
  this.err = status;
6900
6900
  this.msg = this.strm.msg;
6901
6901
  };
6902
- function inflate(input, options) {
6903
- var inflator = new Inflate(options);
6902
+ function inflate(input, options2) {
6903
+ var inflator = new Inflate(options2);
6904
6904
  inflator.push(input, true);
6905
6905
  if (inflator.err) {
6906
6906
  throw inflator.msg || msg[inflator.err];
6907
6907
  }
6908
6908
  return inflator.result;
6909
6909
  }
6910
- function inflateRaw(input, options) {
6911
- options = options || {};
6912
- options.raw = true;
6913
- return inflate(input, options);
6910
+ function inflateRaw(input, options2) {
6911
+ options2 = options2 || {};
6912
+ options2.raw = true;
6913
+ return inflate(input, options2);
6914
6914
  }
6915
6915
  exports.Inflate = Inflate;
6916
6916
  exports.inflate = inflate;
@@ -10043,7 +10043,7 @@ function inflateZlibSync(input) {
10043
10043
  bitCnt -= n;
10044
10044
  return v;
10045
10045
  };
10046
- const decode2 = (h) => {
10046
+ const decode3 = (h) => {
10047
10047
  let code = 0;
10048
10048
  let first = 0;
10049
10049
  let index = 0;
@@ -10101,7 +10101,7 @@ function inflateZlibSync(input) {
10101
10101
  const clh = buildHuffman(cl, 19);
10102
10102
  const lens = new Uint8Array(hlit + hdist);
10103
10103
  for (let i = 0; i < hlit + hdist; ) {
10104
- const sym = decode2(clh);
10104
+ const sym = decode3(clh);
10105
10105
  if (sym < 16) {
10106
10106
  lens[i++] = sym;
10107
10107
  } else if (sym === 16) {
@@ -10121,7 +10121,7 @@ function inflateZlibSync(input) {
10121
10121
  throw new Error("inflate: invalid block type");
10122
10122
  }
10123
10123
  for (; ; ) {
10124
- const sym = decode2(lit);
10124
+ const sym = decode3(lit);
10125
10125
  if (sym < 256) {
10126
10126
  need(1);
10127
10127
  out[outLen++] = sym;
@@ -10130,7 +10130,7 @@ function inflateZlibSync(input) {
10130
10130
  } else {
10131
10131
  const li = sym - 257;
10132
10132
  const len = LENGTH_BASE[li] + bits(LENGTH_EXTRA[li]);
10133
- const di = decode2(dist);
10133
+ const di = decode3(dist);
10134
10134
  const d = DIST_BASE[di] + bits(DIST_EXTRA[di]);
10135
10135
  need(len);
10136
10136
  for (let k = 0; k < len; k++) {
@@ -10310,15 +10310,74 @@ async function decodePng(bytes) {
10310
10310
  return { width, height, data: out };
10311
10311
  }
10312
10312
 
10313
- // src/image-codec-fallback.ts
10313
+ // src/jpeg-decoder.ts
10314
10314
  var import_jpeg_js = __toESM(require_jpeg_js());
10315
+ var options = { useTArray: true, formatAsRGBA: true, maxResolutionInMP: 67.108864, maxMemoryUsageInMB: 512 };
10316
+ function decodeJpegPixels(bytes, colorTransform) {
10317
+ let sampling = [];
10318
+ let adobeTransform;
10319
+ let adobeOffset = -1;
10320
+ for (let position = 2; position + 4 <= bytes.length; ) {
10321
+ if (bytes[position] !== 255) break;
10322
+ if (bytes[position + 1] === 255) {
10323
+ position++;
10324
+ continue;
10325
+ }
10326
+ const marker = bytes[position + 1];
10327
+ if (marker === 218 || marker === 217) break;
10328
+ const length = bytes[position + 2] * 256 + bytes[position + 3];
10329
+ if (length < 2 || position + length + 2 > bytes.length) break;
10330
+ const start = position + 4;
10331
+ if ([192, 193, 194].includes(marker) && length >= 8) {
10332
+ const count = bytes[start + 5];
10333
+ 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 }));
10334
+ }
10335
+ if (marker === 238 && length >= 14 && String.fromCharCode(...bytes.subarray(start, start + 5)) === "Adobe") {
10336
+ adobeOffset = start + 11;
10337
+ adobeTransform = bytes[adobeOffset];
10338
+ }
10339
+ position += length + 2;
10340
+ }
10341
+ const transform = colorTransform ?? (adobeTransform !== void 0 ? adobeTransform !== 0 : !sampling.every((component, i) => component.id === [82, 71, 66][i]));
10342
+ if (sampling.length !== 3 || !transform) return (0, import_jpeg_js.decode)(bytes, { ...options, colorTransform: sampling.length === 3 ? transform : colorTransform });
10343
+ const maxH = Math.max(...sampling.map((c) => c.h)), maxV = Math.max(...sampling.map((c) => c.v));
10344
+ if (sampling.some((c) => !c.h || !c.v || maxH % c.h || maxV % c.v)) return (0, import_jpeg_js.decode)(bytes, { ...options, colorTransform });
10345
+ let encoded = bytes;
10346
+ if (adobeTransform) {
10347
+ encoded = bytes.slice();
10348
+ encoded[adobeOffset] = 0;
10349
+ }
10350
+ const raw = (0, import_jpeg_js.decode)(encoded, { ...options, colorTransform: false });
10351
+ const { width, height } = raw;
10352
+ const data = new Uint8Array(raw.data.length);
10353
+ const sample2 = (x, y, channel) => {
10354
+ const sx = maxH / sampling[channel].h, sy = maxV / sampling[channel].v;
10355
+ const px = Math.max(0, Math.min(Math.ceil(width / sx) - 1, (x + 0.5) / sx - 0.5));
10356
+ const py = Math.max(0, Math.min(Math.ceil(height / sy) - 1, (y + 0.5) / sy - 0.5));
10357
+ const ix = Math.floor(px), iy = Math.floor(py), fx = px - ix, fy = py - iy;
10358
+ const at = (xx, yy) => raw.data[(Math.min(height - 1, yy * sy) * width + Math.min(width - 1, xx * sx)) * 4 + channel];
10359
+ 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));
10360
+ };
10361
+ const byte = (value) => Math.max(0, Math.min(255, Math.round(value)));
10362
+ for (let y = 0; y < height; y++) for (let x = 0; x < width; x++) {
10363
+ const luma = sample2(x, y, 0), cb = sample2(x, y, 1) - 128, cr = sample2(x, y, 2) - 128;
10364
+ const offset = (y * width + x) * 4;
10365
+ data[offset] = byte(luma + 1.402 * cr);
10366
+ data[offset + 1] = byte(luma - 0.3441363 * cb - 0.71413636 * cr);
10367
+ data[offset + 2] = byte(luma + 1.772 * cb);
10368
+ data[offset + 3] = 255;
10369
+ }
10370
+ return { ...raw, data };
10371
+ }
10372
+
10373
+ // src/image-codec-fallback.ts
10315
10374
  var import_gifuct_js = __toESM(require_lib2());
10316
10375
  var UTIF = __toESM(require_UTIF());
10317
10376
 
10318
10377
  // src/tiff-group3.ts
10319
10378
  function normalizeGroup3(buffer, page) {
10320
- const options = Array.isArray(page.t292) ? Number(page.t292[0]) : 0;
10321
- if (!Array.isArray(page.t259) || page.t259[0] !== 3 || (options & 3) !== 0) return buffer;
10379
+ const options2 = Array.isArray(page.t292) ? Number(page.t292[0]) : 0;
10380
+ if (!Array.isArray(page.t259) || page.t259[0] !== 3 || (options2 & 3) !== 0) return buffer;
10322
10381
  const offsets = page.t273, lengths = page.t279;
10323
10382
  if (!Array.isArray(offsets) || !Array.isArray(lengths) || offsets.length !== lengths.length) return buffer;
10324
10383
  const source = new Uint8Array(buffer);
@@ -10352,16 +10411,50 @@ function normalizeGroup3(buffer, page) {
10352
10411
  return offset;
10353
10412
  });
10354
10413
  page.t279 = strips.map((strip) => strip.length);
10355
- page.t292 = [options | 1];
10414
+ page.t292 = [options2 | 1];
10356
10415
  return normalized.buffer;
10357
10416
  }
10358
10417
 
10418
+ // src/tiff-jpeg.ts
10419
+ function decodeJpegTiff(bytes, page) {
10420
+ const values = (tag2) => Array.isArray(page[tag2]) ? page[tag2].map(Number) : [];
10421
+ const first = (tag2, fallback = 0) => values(tag2)[0] ?? fallback;
10422
+ const photo = first("t262");
10423
+ if (first("t259") !== 7 || photo !== 2 && photo !== 6 || first("t277") !== 3 || first("t284", 1) !== 1 || values("t258").some((v) => v !== 8)) return null;
10424
+ const width = first("t256"), height = first("t257");
10425
+ const tiled = !!page.t322;
10426
+ const blockWidth = tiled ? first("t322") : width;
10427
+ const blockHeight = tiled ? first("t323") : first("t278", height);
10428
+ if (!Number.isInteger(blockWidth) || !Number.isInteger(blockHeight) || blockWidth <= 0 || blockHeight <= 0 || blockWidth > 8192 || blockHeight > 8192) throw new Error("Invalid TIFF JPEG block");
10429
+ const offsets = values(tiled ? "t324" : "t273");
10430
+ const lengths = values(tiled ? "t325" : "t279");
10431
+ const columns = Math.ceil(width / blockWidth), rows = Math.ceil(height / blockHeight);
10432
+ if (offsets.length !== columns * rows || lengths.length !== offsets.length) throw new Error("Invalid TIFF JPEG offsets");
10433
+ const tables = page.t347 instanceof Uint8Array ? page.t347 : new Uint8Array(values("t347"));
10434
+ const tableLength = tables.length >= 2 && tables[tables.length - 2] === 255 && tables[tables.length - 1] === 217 ? tables.length - 2 : tables.length;
10435
+ const result = new Uint8ClampedArray(width * height * 4);
10436
+ for (let block = 0; block < offsets.length; block++) {
10437
+ const offset = offsets[block], length = lengths[block];
10438
+ if (!Number.isInteger(offset) || !Number.isInteger(length) || offset < 0 || length <= 0 || offset + length > bytes.length) throw new Error("Invalid TIFF JPEG data");
10439
+ const skip = tableLength && bytes[offset] === 255 && bytes[offset + 1] === 216 ? 2 : 0;
10440
+ const jpeg = new Uint8Array(tableLength + length - skip);
10441
+ jpeg.set(tables.subarray(0, tableLength));
10442
+ jpeg.set(bytes.subarray(offset + skip, offset + length), tableLength);
10443
+ const decoded = decodeJpegPixels(jpeg, photo === 6);
10444
+ const x = block % columns * blockWidth, y = Math.floor(block / columns) * blockHeight;
10445
+ const copyWidth = Math.min(blockWidth, width - x), copyHeight = Math.min(blockHeight, height - y);
10446
+ if (decoded.width !== blockWidth || decoded.height < copyHeight || decoded.height > blockHeight) throw new Error("Invalid TIFF JPEG dimensions");
10447
+ 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);
10448
+ }
10449
+ return result;
10450
+ }
10451
+
10359
10452
  // src/image-codec-fallback.ts
10360
10453
  var validSize = (w, h) => Number.isInteger(w) && Number.isInteger(h) && w > 0 && h > 0 && w <= 8192 && h <= 8192;
10361
10454
  function decodeImageCodecFallback(bytes) {
10362
10455
  try {
10363
10456
  if (bytes[0] === 255 && bytes[1] === 216) {
10364
- const p = (0, import_jpeg_js.decode)(bytes, { useTArray: true, formatAsRGBA: true, maxResolutionInMP: 67.108864, maxMemoryUsageInMB: 512 });
10457
+ const p = decodeJpegPixels(bytes);
10365
10458
  return validSize(p.width, p.height) ? { ...p, data: new Uint8ClampedArray(p.data) } : null;
10366
10459
  }
10367
10460
  if (bytes.length >= 13 && String.fromCharCode(...bytes.subarray(0, 6)).match(/^GIF8[79]a$/)) {
@@ -10395,6 +10488,9 @@ function decodeImageCodecFallback(bytes) {
10395
10488
  const pages = UTIF.decode(buffer);
10396
10489
  const page = pages.find((p) => p.t256 && p.t257);
10397
10490
  if (!page || !Array.isArray(page.t256) || !Array.isArray(page.t257) || !validSize(Number(page.t256[0]), Number(page.t257[0]))) return null;
10491
+ const jpeg = decodeJpegTiff(new Uint8Array(buffer), page);
10492
+ if (jpeg) return { data: jpeg, width: Number(page.t256[0]), height: Number(page.t257[0]) };
10493
+ if (Array.isArray(page.t259) && page.t259[0] === 32946) page.t259 = [8];
10398
10494
  UTIF.decodeImage(normalizeGroup3(buffer, page), page);
10399
10495
  const width = page.width, height = page.height;
10400
10496
  if (!validSize(width, height)) return null;
@@ -14313,13 +14409,13 @@ function writeJsx(node, depth, out, rootSpread) {
14313
14409
  }
14314
14410
  out.push(`${pad}</${node.tag}>`);
14315
14411
  }
14316
- function svgTreeToJsx(node, options = {}) {
14317
- const name = options.componentName ?? "Metafile";
14412
+ function svgTreeToJsx(node, options2 = {}) {
14413
+ const name = options2.componentName ?? "Metafile";
14318
14414
  if (!/^[A-Z][A-Za-z0-9_$]*$/.test(name)) {
14319
14415
  throw new TypeError(`svgTreeToJsx: componentName must be a PascalCase identifier, got ${JSON.stringify(name)}`);
14320
14416
  }
14321
- const ts = options.typescript ?? true;
14322
- const spread = options.spreadProps ?? true;
14417
+ const ts = options2.typescript ?? true;
14418
+ const spread = options2.spreadProps ?? true;
14323
14419
  const body = [];
14324
14420
  writeJsx(node, 2, body, spread);
14325
14421
  const params = spread ? ts ? "props: SVGProps<SVGSVGElement>" : "props" : "";
@@ -15762,11 +15858,11 @@ function mirror(p, n) {
15762
15858
  }
15763
15859
  return p;
15764
15860
  }
15765
- function gdipBlur(src, w, h, radius, vRow = 0, vZeroAbove = false) {
15861
+ function gdipBlur(src, w, h, radius, vRow = 0, vZeroAbove = false, fullVertical = false, edgeWidth = w, edgeHeight = h) {
15766
15862
  const k = blurKernel(radius);
15767
15863
  const taps = (k.length - 1) / 2;
15768
- const horizontalIndex = radius <= 16 && radius >= w ? (x) => Math.max(0, Math.min(w - 1, x)) : (x) => mirror(x, w);
15769
- const verticalIndex = radius <= 16 && radius >= h ? (y) => Math.max(0, Math.min(h - 1, y)) : (y) => mirror(y, h);
15864
+ const horizontalIndex = taps >= edgeWidth ? (x) => Math.max(0, Math.min(w - 1, x)) : (x) => mirror(x, w);
15865
+ const verticalIndex = taps >= edgeHeight ? (y) => Math.max(0, Math.min(h - 1, y)) : (y) => mirror(y, h);
15770
15866
  const out = new Float64Array(w * h * 4);
15771
15867
  for (let y = 0; y < h; y++) {
15772
15868
  const row = y * w * 4;
@@ -15792,7 +15888,7 @@ function gdipBlur(src, w, h, radius, vRow = 0, vZeroAbove = false) {
15792
15888
  }
15793
15889
  if (taps > 0 && vRow >= 0 && vRow < h) {
15794
15890
  const horizontal = out.slice();
15795
- const endRow = Math.min(h, vRow + (radius <= 16 ? Math.ceil(h / w) : 1));
15891
+ const endRow = fullVertical ? h : Math.min(h, vRow + Math.ceil(h / w));
15796
15892
  for (let row = vRow; row < endRow; row++) {
15797
15893
  const col = new Float64Array(w * 4);
15798
15894
  for (let j = -taps; j <= taps; j++) {
@@ -15810,14 +15906,46 @@ function gdipBlur(src, w, h, radius, vRow = 0, vZeroAbove = false) {
15810
15906
  }
15811
15907
  return out;
15812
15908
  }
15909
+ function blurReduction(radius) {
15910
+ return radius < 20 ? 1 : radius < 40 ? 2 : radius <= 80 ? 4 : radius < 160 ? 8 : 16;
15911
+ }
15912
+ function effectBlur(src, width, height, radius) {
15913
+ const factor = blurReduction(radius);
15914
+ if (factor === 1 || (width < 4 || height < 4) && (width % factor !== 0 || height % factor !== 0)) {
15915
+ return gdipBlur(src, width, height, radius);
15916
+ }
15917
+ const w = Math.ceil(width / factor);
15918
+ const h = Math.ceil(height / factor);
15919
+ const reduced = new Uint8ClampedArray(w * h * 4);
15920
+ for (let y = 0; y < h; y++) for (let x = 0; x < w; x++) {
15921
+ const x1 = Math.min(width, (x + 1) * factor), y1 = Math.min(height, (y + 1) * factor);
15922
+ const count = (x1 - x * factor) * (y1 - y * factor);
15923
+ for (let c = 0; c < 4; c++) {
15924
+ let sum = 0;
15925
+ for (let yy = y * factor; yy < y1; yy++) for (let xx = x * factor; xx < x1; xx++) sum += src[(yy * width + xx) * 4 + c];
15926
+ reduced[(y * w + x) * 4 + c] = Math.floor(sum / count);
15927
+ }
15928
+ }
15929
+ const filtered = gdipBlur(reduced, w, h, radius / factor, 0, false, true, Math.floor(width / factor), Math.floor(height / factor));
15930
+ for (let i = 0; i < filtered.length; i++) filtered[i] = Math.round(filtered[i]);
15931
+ const out = new Float64Array(src.length);
15932
+ for (let y = 0; y < height; y++) for (let x = 0; x < width; x++) {
15933
+ const px = clamp((x + 0.5) / factor - 0.5, 0, w - 1), py = clamp((y + 0.5) / factor - 0.5, 0, h - 1);
15934
+ const ix = Math.floor(px), iy = Math.floor(py), fx = px - ix, fy = py - iy;
15935
+ const a = (iy * w + ix) * 4, b = (iy * w + Math.min(w - 1, ix + 1)) * 4;
15936
+ const d = (Math.min(h - 1, iy + 1) * w + ix) * 4, e = (Math.min(h - 1, iy + 1) * w + Math.min(w - 1, ix + 1)) * 4;
15937
+ for (let c = 0; c < 4; c++) out[(y * width + x) * 4 + c] = Math.round((1 - fy) * ((1 - fx) * filtered[a + c] + fx * filtered[b + c]) + fy * ((1 - fx) * filtered[d + c] + fx * filtered[e + c]));
15938
+ }
15939
+ return out;
15940
+ }
15813
15941
  function applyBlur(src, w, h, radius) {
15814
- return Uint8ClampedArray.from(gdipBlur(src, w, h, radius), Math.round);
15942
+ return Uint8ClampedArray.from(effectBlur(src, w, h, radius), Math.round);
15815
15943
  }
15816
15944
  function sharpenGain(_radius, amount) {
15817
15945
  return roundHalfDown(64 * amount / (250 - 2 * amount)) / 64;
15818
15946
  }
15819
15947
  function applySharpen(src, w, h, radius, amount) {
15820
- const blurred = gdipBlur(src, w, h, radius);
15948
+ const blurred = effectBlur(src, w, h, radius);
15821
15949
  const gain = sharpenGain(radius, amount);
15822
15950
  const out = new Uint8ClampedArray(src);
15823
15951
  for (let i = 0; i < src.length; i += 4) {
@@ -18639,11 +18767,11 @@ function capFigures(path, closeAll) {
18639
18767
  }, [1, 0, 0, 1, 0, 0]);
18640
18768
  return closeAll ? figures.map((f) => ({ ...f, closed: true })) : figures;
18641
18769
  }
18642
- function customCapGeometry(figures, width, start, end, options = {}) {
18770
+ function customCapGeometry(figures, width, start, end, options2 = {}) {
18643
18771
  const out = [];
18644
18772
  const capped = [];
18645
18773
  const polygons = [];
18646
- const minFill = options.minFillScale ?? 2;
18774
+ const minFill = options2.minFillScale ?? 2;
18647
18775
  for (const fig of figures) {
18648
18776
  if (fig.closed || !start && !end) {
18649
18777
  out.push(fig);
@@ -18696,7 +18824,7 @@ function customCapGeometry(figures, width, start, end, options = {}) {
18696
18824
  const pen = {
18697
18825
  // GDI+'s widener never makes an outline thinner than one device pixel.
18698
18826
  half: Math.max(ws, 1) / 2,
18699
- join: (options.widenJoin ?? ((j) => j))(cap.strokeJoin),
18827
+ join: (options2.widenJoin ?? ((j) => j))(cap.strokeJoin),
18700
18828
  miterLimit: 10,
18701
18829
  startCap: cap.strokeStartCap,
18702
18830
  endCap: cap.strokeEndCap,
@@ -18706,7 +18834,7 @@ function customCapGeometry(figures, width, start, end, options = {}) {
18706
18834
  compound: null,
18707
18835
  inset: false
18708
18836
  };
18709
- polygons.push(...(options.widen ?? widenFigures)(capFigures(placed, false), pen).map((q) => q.reverse()));
18837
+ polygons.push(...(options2.widen ?? widenFigures)(capFigures(placed, false), pen).map((q) => q.reverse()));
18710
18838
  }
18711
18839
  };
18712
18840
  if (start) {
@@ -20421,7 +20549,7 @@ var BLEND_MODES = /* @__PURE__ */ new Set([
20421
20549
  "luminosity"
20422
20550
  ]);
20423
20551
  var SvgContext = class {
20424
- constructor(width, height, options = {}) {
20552
+ constructor(width, height, options2 = {}) {
20425
20553
  this.nextId = 0;
20426
20554
  this.stack = [];
20427
20555
  /** The current path, in DEVICE space (see `canvas-path.ts`). */
@@ -20432,9 +20560,9 @@ var SvgContext = class {
20432
20560
  this.group = null;
20433
20561
  this.images = [];
20434
20562
  this.canvas = { width, height, svgContext: this };
20435
- this.shadow = options.shadow ?? null;
20436
- this.imageResampling = options.imageResampling ?? "renderer";
20437
- this.idPrefix = options.idPrefix ?? "emf-";
20563
+ this.shadow = options2.shadow ?? null;
20564
+ this.imageResampling = options2.imageResampling ?? "renderer";
20565
+ this.idPrefix = options2.idPrefix ?? "emf-";
20438
20566
  this.state = {
20439
20567
  transform: [...IDENTITY3],
20440
20568
  fillStyle: "#000000",
@@ -21437,7 +21565,7 @@ var SvgContext = class {
21437
21565
  * Encodes every pending raster payload and returns the finished `<svg>`
21438
21566
  * tree. Call once, after replay (and deferred images) are complete.
21439
21567
  */
21440
- async toTree(options = {}) {
21568
+ async toTree(options2 = {}) {
21441
21569
  const cache2 = /* @__PURE__ */ new Map();
21442
21570
  for (const img of this.images) {
21443
21571
  let url = cache2.get(img.payload);
@@ -21449,7 +21577,7 @@ var SvgContext = class {
21449
21577
  }
21450
21578
  const { width, height } = this.canvas;
21451
21579
  const attrs = { xmlns: "http://www.w3.org/2000/svg" };
21452
- if (options.includeSize ?? true) {
21580
+ if (options2.includeSize ?? true) {
21453
21581
  attrs.width = width;
21454
21582
  attrs.height = height;
21455
21583
  }
@@ -32274,12 +32402,12 @@ function drawWithFontEngine(rCtx, offset, dataOff, nChars, offString, viewEnd) {
32274
32402
  if (!fonts) {
32275
32403
  return false;
32276
32404
  }
32277
- const options = view.getUint32(dataOff + 44, true);
32405
+ const options2 = view.getUint32(dataOff + 44, true);
32278
32406
  const codes = [];
32279
32407
  for (let i = 0; i < nChars; i++) {
32280
32408
  codes.push(view.getUint16(offset + offString + i * 2, true));
32281
32409
  }
32282
- const pdy = (options & ETO_PDY) !== 0;
32410
+ const pdy = (options2 & ETO_PDY) !== 0;
32283
32411
  const raw = readDxArray(view, offset, dataOff, pdy ? nChars * 2 : nChars, viewEnd);
32284
32412
  let dx = raw;
32285
32413
  let dy = null;
@@ -32293,10 +32421,10 @@ function drawWithFontEngine(rCtx, offset, dataOff, nChars, offString, viewEnd) {
32293
32421
  }
32294
32422
  const adv = drawGdiTextCall(ctx, fonts, state, {
32295
32423
  codes,
32296
- glyphIndices: (options & ETO_GLYPH_INDEX) !== 0,
32424
+ glyphIndices: (options2 & ETO_GLYPH_INDEX) !== 0,
32297
32425
  x: view.getInt32(dataOff + 28, true),
32298
32426
  y: view.getInt32(dataOff + 32, true),
32299
- options,
32427
+ options: options2,
32300
32428
  rect: {
32301
32429
  left: view.getInt32(dataOff + 48, true),
32302
32430
  top: view.getInt32(dataOff + 52, true),
@@ -32438,7 +32566,7 @@ function handleExtTextOutW(rCtx, offset, dataOff, recSize) {
32438
32566
  }
32439
32567
  return true;
32440
32568
  }
32441
- function drawTextCall(rCtx, x, y, codes, options, rect, dx) {
32569
+ function drawTextCall(rCtx, x, y, codes, options2, rect, dx) {
32442
32570
  const n = codes.length;
32443
32571
  const offString = 76;
32444
32572
  const offDx = offString + n * 2 + 3 & -4;
@@ -32447,7 +32575,7 @@ function drawTextCall(rCtx, x, y, codes, options, rect, dx) {
32447
32575
  const view = new DataView(new ArrayBuffer(size));
32448
32576
  view.setUint32(44, n, true);
32449
32577
  view.setUint32(48, offString, true);
32450
- view.setUint32(52, options, true);
32578
+ view.setUint32(52, options2, true);
32451
32579
  view.setInt32(36, x, true);
32452
32580
  view.setInt32(40, y, true);
32453
32581
  view.setInt32(56, rect[0], true);
@@ -32491,7 +32619,7 @@ function handlePolyText(rCtx, offset, dataOff, recSize, wide) {
32491
32619
  const e = arrayStart + i * 40;
32492
32620
  const x = view.getInt32(e, true), y = view.getInt32(e + 4, true);
32493
32621
  const n = view.getUint32(e + 8, true), offString = view.getUint32(e + 12, true);
32494
- const options = view.getUint32(e + 16, true);
32622
+ const options2 = view.getUint32(e + 16, true);
32495
32623
  const rect = [view.getInt32(e + 20, true), view.getInt32(e + 24, true), view.getInt32(e + 28, true), view.getInt32(e + 32, true)];
32496
32624
  const offDx = view.getUint32(e + 36, true);
32497
32625
  const unit = wide ? 2 : 1;
@@ -32499,13 +32627,13 @@ function handlePolyText(rCtx, offset, dataOff, recSize, wide) {
32499
32627
  const ansi = wide ? null : readAnsiRecord(view, offset + offString, n, charSet);
32500
32628
  const codes = wide ? Array.from({ length: n }, (_, j) => view.getUint16(offset + offString + j * 2, true)) : ansi.codes;
32501
32629
  let dx = null;
32502
- const pdy = (options & ETO_PDY) !== 0;
32630
+ const pdy = (options2 & ETO_PDY) !== 0;
32503
32631
  const dxCount = n * (pdy ? 2 : 1);
32504
32632
  if (offDx && offDx <= end - offset && dxCount <= Math.floor((end - (offset + offDx)) / 4)) {
32505
32633
  dx = Array.from({ length: dxCount }, (_, j) => view.getInt32(offset + offDx + j * 4, true));
32506
32634
  if (!wide) dx = collapseAnsiDx(dx, ansi.byteLengths, pdy);
32507
32635
  }
32508
- drawTextCall(rCtx, x, y, codes, options, rect, dx);
32636
+ drawTextCall(rCtx, x, y, codes, options2, rect, dx);
32509
32637
  }
32510
32638
  return true;
32511
32639
  }
@@ -32514,13 +32642,13 @@ function handleSmallTextOut(rCtx, offset, dataOff, recSize) {
32514
32642
  const end = Math.min(view.byteLength, offset + recSize);
32515
32643
  if (recSize < 36) return true;
32516
32644
  const x = view.getInt32(dataOff, true), y = view.getInt32(dataOff + 4, true);
32517
- const n = view.getUint32(dataOff + 8, true), options = view.getUint32(dataOff + 12, true);
32518
- const small = (options & 512) !== 0, noRect = (options & 256) !== 0;
32645
+ const n = view.getUint32(dataOff + 8, true), options2 = view.getUint32(dataOff + 12, true);
32646
+ const small = (options2 & 512) !== 0, noRect = (options2 & 256) !== 0;
32519
32647
  const base = dataOff + 28 + (noRect ? 0 : 16);
32520
32648
  if (base > end || n > Math.floor((end - base) / (small ? 1 : 2))) return true;
32521
32649
  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)];
32522
32650
  const codes = small ? Array.from({ length: n }, (_, i) => view.getUint8(base + i)) : Array.from({ length: n }, (_, i) => view.getUint16(base + i * 2, true));
32523
- drawTextCall(rCtx, x, y, codes, options, rect, null);
32651
+ drawTextCall(rCtx, x, y, codes, options2, rect, null);
32524
32652
  return true;
32525
32653
  }
32526
32654
  function handleEmfGdiDrawTextRecord(rCtx, recType, offset, dataOff, recSize) {
@@ -32534,20 +32662,20 @@ function handleEmfGdiDrawTextRecord(rCtx, recType, offset, dataOff, recSize) {
32534
32662
  const end = Math.min(view.byteLength, offset + recSize);
32535
32663
  if (recSize < 76) return true;
32536
32664
  const x = view.getInt32(dataOff + 28, true), y = view.getInt32(dataOff + 32, true);
32537
- const n = view.getUint32(dataOff + 36, true), strOff = view.getUint32(dataOff + 40, true), options = view.getUint32(dataOff + 44, true);
32665
+ const n = view.getUint32(dataOff + 36, true), strOff = view.getUint32(dataOff + 40, true), options2 = view.getUint32(dataOff + 44, true);
32538
32666
  if (!strOff || strOff > end - offset) return true;
32539
32667
  if (n > end - (offset + strOff)) return true;
32540
32668
  const ansi = readAnsiRecord(view, offset + strOff, n, state.fontDetails?.charSet ?? 1);
32541
32669
  const rect = [view.getInt32(dataOff + 48, true), view.getInt32(dataOff + 52, true), view.getInt32(dataOff + 56, true), view.getInt32(dataOff + 60, true)];
32542
32670
  const offDx = view.getUint32(dataOff + 64, true);
32543
32671
  let dx = null;
32544
- const pdy = (options & ETO_PDY) !== 0;
32672
+ const pdy = (options2 & ETO_PDY) !== 0;
32545
32673
  const dxCount = n * (pdy ? 2 : 1);
32546
32674
  if (offDx && offDx <= end - offset && dxCount <= Math.floor((end - (offset + offDx)) / 4)) {
32547
32675
  dx = Array.from({ length: dxCount }, (_, i) => view.getInt32(offset + offDx + i * 4, true));
32548
32676
  dx = collapseAnsiDx(dx, ansi.byteLengths, pdy);
32549
32677
  }
32550
- drawTextCall(rCtx, x, y, ansi.codes, options, rect, dx);
32678
+ drawTextCall(rCtx, x, y, ansi.codes, options2, rect, dx);
32551
32679
  return true;
32552
32680
  }
32553
32681
  return false;
@@ -33528,8 +33656,8 @@ function widenBracketPath(rCtx) {
33528
33656
  if (rCtx.inPath || !rCtx.rasterPath || (state.penStyle & 15) === 5) {
33529
33657
  return;
33530
33658
  }
33531
- const options = penIsCosmetic(rCtx) ? { width: 16, cap: "round", join: "round", miterLimit: state.miterLimit ?? 10 } : penWidenOptions(rCtx);
33532
- const polys = widenPath(rCtx.rasterPath, options);
33659
+ const options2 = penIsCosmetic(rCtx) ? { width: 16, cap: "round", join: "round", miterLimit: state.miterLimit ?? 10 } : penWidenOptions(rCtx);
33660
+ const polys = widenPath(rCtx.rasterPath, options2);
33533
33661
  const path = new GdiRasterPath();
33534
33662
  for (const poly of polys) {
33535
33663
  if (poly.length < 4) {
@@ -36310,7 +36438,7 @@ function replayEmfRecords(view, ctx, bounds, canvasW, canvasH, dpiScale = 1, rep
36310
36438
  }
36311
36439
  return allDeferredImages;
36312
36440
  }
36313
- function replayNestedEmf(bytes, ctx, canvasW, canvasH, toCanvas, options) {
36441
+ function replayNestedEmf(bytes, ctx, canvasW, canvasH, toCanvas, options2) {
36314
36442
  const view = new DataView(bytes);
36315
36443
  const header = parseEmfHeader(view);
36316
36444
  if (!header) {
@@ -36321,11 +36449,11 @@ function replayNestedEmf(bytes, ctx, canvasW, canvasH, toCanvas, options) {
36321
36449
  const left = -e / a;
36322
36450
  const top = -f / d;
36323
36451
  const bounds2 = { left, top, right: left + canvasW / a, bottom: top + canvasH / d };
36324
- return replayEmfRecords(view, ctx, bounds2, canvasW, canvasH, 1, options);
36452
+ return replayEmfRecords(view, ctx, bounds2, canvasW, canvasH, 1, options2);
36325
36453
  }
36326
36454
  const bounds = { left: 0, top: 0, right: canvasW, bottom: canvasH };
36327
36455
  return replayEmfRecords(view, ctx, bounds, canvasW, canvasH, 1, {
36328
- ...options,
36456
+ ...options2,
36329
36457
  plusBaseTransform: toCanvas,
36330
36458
  gdiDrawing: false
36331
36459
  });
@@ -37869,8 +37997,8 @@ function wmfExtTextOut(p, dataOff, recEnd) {
37869
37997
  const y = view.getInt16(dataOff, true);
37870
37998
  const x = view.getInt16(dataOff + 2, true);
37871
37999
  const n = view.getInt16(dataOff + 4, true);
37872
- const options = view.getUint16(dataOff + 6, true);
37873
- const hasRect = (options & (ETO_OPAQUE | ETO_CLIPPED)) !== 0;
38000
+ const options2 = view.getUint16(dataOff + 6, true);
38001
+ const hasRect = (options2 & (ETO_OPAQUE | ETO_CLIPPED)) !== 0;
37874
38002
  const strOff = dataOff + 8 + (hasRect ? 8 : 0);
37875
38003
  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;
37876
38004
  const count = Math.max(0, n);
@@ -37890,12 +38018,12 @@ function wmfExtTextOut(p, dataOff, recEnd) {
37890
38018
  }
37891
38019
  }
37892
38020
  if (count === 0) {
37893
- if (rect && options & ETO_OPAQUE) {
37894
- playText(p, { x, y, bytes: [32], options, rect, dx: [0] });
38021
+ if (rect && options2 & ETO_OPAQUE) {
38022
+ playText(p, { x, y, bytes: [32], options: options2, rect, dx: [0] });
37895
38023
  }
37896
38024
  return;
37897
38025
  }
37898
- playText(p, { x, y, bytes, options, rect, dx });
38026
+ playText(p, { x, y, bytes, options: options2, rect, dx });
37899
38027
  }
37900
38028
 
37901
38029
  // src/wmf-replay.ts
@@ -38365,7 +38493,7 @@ function replayWmfRecords(view, ctx, header, canvasW, canvasH, replayOptions = {
38365
38493
 
38366
38494
  // src/emf-converter.ts
38367
38495
  var MAX_METAFILE_RECURSION = 3;
38368
- async function replayMetafile(buffer, options, createSurface) {
38496
+ async function replayMetafile(buffer, options2, createSurface) {
38369
38497
  emfLog(`replayMetafile: input buffer ${buffer.byteLength} bytes`);
38370
38498
  if (buffer.byteLength >= 16) {
38371
38499
  const hdrBytes = new Uint8Array(buffer, 0, 16);
@@ -38373,7 +38501,7 @@ async function replayMetafile(buffer, options, createSurface) {
38373
38501
  `replayMetafile: first 16 bytes: [${Array.from(hdrBytes).map((b) => b.toString(16).padStart(2, "0")).join(" ")}]`
38374
38502
  );
38375
38503
  }
38376
- const opts = options ?? {};
38504
+ const opts = options2 ?? {};
38377
38505
  const dpiScale = opts.dpiScale ?? DEFAULT_DPI_SCALE;
38378
38506
  let view = new DataView(buffer);
38379
38507
  let emfHeader = null;
@@ -38579,12 +38707,12 @@ async function processDeferredImages(ctx, deferredImages, recursionDepth) {
38579
38707
  ctx.setTransform(1, 0, 0, 1, 0, 0);
38580
38708
  return complete;
38581
38709
  }
38582
- async function convertMetafileToDataUrl(buffer, options, recursionDepth = 0) {
38710
+ async function convertMetafileToDataUrl(buffer, options2, recursionDepth = 0) {
38583
38711
  await ensureNodeCanvasModule();
38584
38712
  if (recursionDepth > MAX_METAFILE_RECURSION) {
38585
38713
  return null;
38586
38714
  }
38587
- const opts = { ...options, gdiAntialias: options?.gdiAntialias ?? false };
38715
+ const opts = { ...options2, gdiAntialias: options2?.gdiAntialias ?? false };
38588
38716
  let canvas = null;
38589
38717
  const result = await replayMetafile(buffer, opts, (w, h) => {
38590
38718
  const setup = createCanvas(
@@ -38653,7 +38781,7 @@ async function resampleExact(bytes, spec, surface) {
38653
38781
  }
38654
38782
  return resampleImage(pixels.data, pixels.width, pixels.height, spec, { w: surface.width, h: surface.height });
38655
38783
  }
38656
- async function processDeferredImagesSvg(svg, deferredImages, options, recursionDepth) {
38784
+ async function processDeferredImagesSvg(svg, deferredImages, options2, recursionDepth) {
38657
38785
  for (let idx = 0; idx < deferredImages.length; idx++) {
38658
38786
  let img = deferredImages[idx];
38659
38787
  try {
@@ -38676,7 +38804,7 @@ async function processDeferredImagesSvg(svg, deferredImages, options, recursionD
38676
38804
  }
38677
38805
  const nested = await convertMetafileToSvgTree(
38678
38806
  bytes,
38679
- { ...options, includeSize: true, idPrefix: void 0 },
38807
+ { ...options2, includeSize: true, idPrefix: void 0 },
38680
38808
  recursionDepth + 1
38681
38809
  );
38682
38810
  if (nested) {
@@ -38713,7 +38841,7 @@ async function processDeferredImagesSvg(svg, deferredImages, options, recursionD
38713
38841
  continue;
38714
38842
  }
38715
38843
  const slot = img.svgSlot ?? svg.reserveSlot();
38716
- if (img.resample && options.imageResampling === "exact" && !img.isMetafile) {
38844
+ if (img.resample && options2.imageResampling === "exact" && !img.isMetafile) {
38717
38845
  const block = await resampleExact(bytes, img.resample, svg.canvas);
38718
38846
  if (block) {
38719
38847
  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);
@@ -38733,16 +38861,16 @@ async function processDeferredImagesSvg(svg, deferredImages, options, recursionD
38733
38861
  }
38734
38862
  }
38735
38863
  }
38736
- async function convertMetafileToSvgTree(buffer, options, recursionDepth = 0) {
38737
- const svg = await replayToSvgContext(buffer, options, recursionDepth);
38738
- return svg ? svg.toTree({ includeSize: options?.includeSize }) : null;
38864
+ async function convertMetafileToSvgTree(buffer, options2, recursionDepth = 0) {
38865
+ const svg = await replayToSvgContext(buffer, options2, recursionDepth);
38866
+ return svg ? svg.toTree({ includeSize: options2?.includeSize }) : null;
38739
38867
  }
38740
- async function replayToSvgContext(buffer, options, recursionDepth = 0) {
38868
+ async function replayToSvgContext(buffer, options2, recursionDepth = 0) {
38741
38869
  await ensureNodeCanvasModule();
38742
38870
  if (recursionDepth > MAX_METAFILE_RECURSION) {
38743
38871
  return null;
38744
38872
  }
38745
- const opts = options ?? {};
38873
+ const opts = options2 ?? {};
38746
38874
  const dpiScale = opts.dpiScale ?? DEFAULT_DPI_SCALE;
38747
38875
  const idPrefix = opts.idPrefix ?? `emf${++svgDocumentCounter}-`;
38748
38876
  let svg = null;
@@ -38759,18 +38887,18 @@ async function replayToSvgContext(buffer, options, recursionDepth = 0) {
38759
38887
  await processDeferredImagesSvg(target, result.deferredImages, opts, recursionDepth);
38760
38888
  return target;
38761
38889
  }
38762
- async function convertMetafileToSvg(buffer, options) {
38763
- const tree = await convertMetafileToSvgTree(buffer, options);
38890
+ async function convertMetafileToSvg(buffer, options2) {
38891
+ const tree = await convertMetafileToSvgTree(buffer, options2);
38764
38892
  return tree ? svgTreeToString(tree) : null;
38765
38893
  }
38766
- async function convertMetafileToSvgDataUrl(buffer, options) {
38767
- const markup = await convertMetafileToSvg(buffer, options);
38894
+ async function convertMetafileToSvgDataUrl(buffer, options2) {
38895
+ const markup = await convertMetafileToSvg(buffer, options2);
38768
38896
  return markup ? svgMarkupToDataUrl(markup) : null;
38769
38897
  }
38770
38898
 
38771
38899
  // src/load-system-fonts.ts
38772
38900
  var FONT_FILE = /\.(ttf|ttc|fon|fnt)$/i;
38773
- async function loadSystemFonts(options = {}) {
38901
+ async function loadSystemFonts(options2 = {}) {
38774
38902
  if (typeof process === "undefined" || !process.versions?.node) {
38775
38903
  return [];
38776
38904
  }
@@ -38796,8 +38924,8 @@ async function loadSystemFonts(options = {}) {
38796
38924
  } catch {
38797
38925
  return [];
38798
38926
  }
38799
- const dirs = options.dirs ?? defaultFontDirs(path, os);
38800
- const maxDepth = options.maxDepth ?? 4;
38927
+ const dirs = options2.dirs ?? defaultFontDirs(path, os);
38928
+ const maxDepth = options2.maxDepth ?? 4;
38801
38929
  const files = [];
38802
38930
  const seen = /* @__PURE__ */ new Set();
38803
38931
  const walk2 = async (dir, depth) => {
@@ -38815,7 +38943,7 @@ async function loadSystemFonts(options = {}) {
38815
38943
  }
38816
38944
  } else if (FONT_FILE.test(e.name)) {
38817
38945
  const key = full.toLowerCase();
38818
- if (!seen.has(key) && (!options.filter || options.filter(full, e.name.toLowerCase()))) {
38946
+ if (!seen.has(key) && (!options2.filter || options2.filter(full, e.name.toLowerCase()))) {
38819
38947
  seen.add(key);
38820
38948
  files.push(full);
38821
38949
  }