@carto/api-client 0.5.32-alpha.77957dd.124 → 0.5.32-alpha.b3291bf.129

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/CHANGELOG.md CHANGED
@@ -3,7 +3,7 @@
3
3
  ## Unreleased
4
4
 
5
5
  - feat(fetchMap): Support line & polygon stroke dash styles (#297)
6
- - feat(fetchMap): Support polygon fill patterns (inline sprite atlas, `getFillPattern`/`scales.fillPattern`, `fillPatternEnabled`)
6
+ - feat(fetchMap): Support polygon fill patterns (runtime-assembled sprite atlas, `getFillPattern`/`scales.fillPattern`, `fillPatternEnabled`)
7
7
 
8
8
  ### 0.5.31
9
9
 
@@ -10675,41 +10675,6 @@ init_cjs_shims();
10675
10675
  // src/fetch-map/pattern-atlas.ts
10676
10676
  init_cjs_shims();
10677
10677
 
10678
- // src/fetch-map/pattern-atlas-baked.ts
10679
- init_cjs_shims();
10680
- var BAKED_ATLAS_URL = "data:image/png;base64,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";
10681
- var PATTERN_ATLAS_MAPPING = {
10682
- "hlines-large": { x: 0, y: 0, width: 64, height: 64, mask: true },
10683
- "hlines-medium": { x: 64, y: 0, width: 64, height: 64, mask: true },
10684
- "hlines-small": { x: 128, y: 0, width: 64, height: 64, mask: true },
10685
- "vlines-large": { x: 0, y: 64, width: 64, height: 64, mask: true },
10686
- "vlines-medium": { x: 64, y: 64, width: 64, height: 64, mask: true },
10687
- "vlines-small": { x: 128, y: 64, width: 64, height: 64, mask: true },
10688
- "diag-left-large": { x: 0, y: 128, width: 64, height: 64, mask: true },
10689
- "diag-left-medium": { x: 64, y: 128, width: 64, height: 64, mask: true },
10690
- "diag-left-small": { x: 128, y: 128, width: 64, height: 64, mask: true },
10691
- "diag-right-large": { x: 0, y: 192, width: 64, height: 64, mask: true },
10692
- "diag-right-medium": { x: 64, y: 192, width: 64, height: 64, mask: true },
10693
- "diag-right-small": { x: 128, y: 192, width: 64, height: 64, mask: true },
10694
- "cross-hatch-large": { x: 0, y: 256, width: 64, height: 64, mask: true },
10695
- "cross-hatch-medium": { x: 64, y: 256, width: 64, height: 64, mask: true },
10696
- "cross-hatch-small": { x: 128, y: 256, width: 64, height: 64, mask: true },
10697
- "dots-large": { x: 0, y: 320, width: 64, height: 64, mask: true },
10698
- "dots-medium": { x: 64, y: 320, width: 64, height: 64, mask: true },
10699
- "dots-small": { x: 128, y: 320, width: 64, height: 64, mask: true },
10700
- "checker-large": { x: 0, y: 384, width: 64, height: 64, mask: true },
10701
- "checker-medium": { x: 64, y: 384, width: 64, height: 64, mask: true },
10702
- "checker-small": { x: 128, y: 384, width: 64, height: 64, mask: true },
10703
- solid: { x: 64, y: 448, width: 64, height: 64, mask: true },
10704
- none: { x: 0, y: 448, width: 64, height: 64, mask: true }
10705
- };
10706
- var CELL = 64;
10707
- var ATLAS_W = CELL * 3;
10708
- var ATLAS_H = CELL * 8;
10709
-
10710
- // src/fetch-map/pattern-atlas-runtime.ts
10711
- init_cjs_shims();
10712
-
10713
10678
  // src/fetch-map/patterns/hlines-large.png
10714
10679
  var hlines_large_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAABBSURBVHic7dixAQAgDMOwwP8/wxfNUOkCz04AYK2T5LUjmm47AAAAAOb5Ae0AAAAAmOcHtAMAAABgnh/QDgAAaj69GwQJx6ek3QAAAABJRU5ErkJggg==";
10715
10680
 
@@ -10776,7 +10741,19 @@ var checker_small_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAA
10776
10741
  // src/fetch-map/patterns/solid.png
10777
10742
  var solid_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAACWSURBVHic7dBBEcAwAMOwrPw5dzD0qIXA52/b3cOODtAaoAO0BugArQE6QGuADtAaoAO0BugArQE6QGuADtAaoAO0BugArQE6QGuADtAaoAO0BugArQE6QGuADtAaoAO0BugArQE6QGuADtAaoAO0BugArQE6QGuADtAaoAO0BugArQE6QGuADtAaoAO0BugArQE6QPsBULQBfwAqZPkAAAAASUVORK5CYII=";
10778
10743
 
10779
- // src/fetch-map/pattern-atlas-runtime.ts
10744
+ // src/fetch-map/pattern-atlas.ts
10745
+ var DEFAULT_CELL_SIZE = 128;
10746
+ var SOURCE_TILE_SIZE = 64;
10747
+ var PATTERN_ROWS = [
10748
+ "hlines",
10749
+ "vlines",
10750
+ "diag-left",
10751
+ "diag-right",
10752
+ "cross-hatch",
10753
+ "dots",
10754
+ "checker"
10755
+ ];
10756
+ var DENSITY_COLUMNS = ["large", "medium", "small"];
10780
10757
  var CELL_URLS = {
10781
10758
  "hlines-large": hlines_large_default,
10782
10759
  "hlines-medium": hlines_medium_default,
@@ -10801,6 +10778,43 @@ var CELL_URLS = {
10801
10778
  "checker-small": checker_small_default,
10802
10779
  solid: solid_default
10803
10780
  };
10781
+ function debugGlobals() {
10782
+ return globalThis;
10783
+ }
10784
+ function getPatternCellSize() {
10785
+ const cell = debugGlobals().__CARTO_PATTERN_CELL_SIZE__;
10786
+ return typeof cell === "number" && cell > 0 ? cell : DEFAULT_CELL_SIZE;
10787
+ }
10788
+ function getPatternTextureParameters() {
10789
+ const params = debugGlobals().__CARTO_PATTERN_TEXTURE_PARAMS__;
10790
+ return params && typeof params === "object" ? params : void 0;
10791
+ }
10792
+ function getPatternScaleAdjustment(cell = getPatternCellSize()) {
10793
+ return SOURCE_TILE_SIZE / cell;
10794
+ }
10795
+ function getPatternCellPadding(cell) {
10796
+ return Math.max(2, Math.round(cell / 16));
10797
+ }
10798
+ function getPatternAtlasMapping(cell = getPatternCellSize()) {
10799
+ const pad = getPatternCellPadding(cell);
10800
+ const pitch = cell + 2 * pad;
10801
+ const mapping = {};
10802
+ const frame = (col, row) => ({
10803
+ x: pad + col * pitch,
10804
+ y: pad + row * pitch,
10805
+ width: cell,
10806
+ height: cell,
10807
+ mask: true
10808
+ });
10809
+ PATTERN_ROWS.forEach((pattern, row) => {
10810
+ DENSITY_COLUMNS.forEach((density, col) => {
10811
+ mapping[`${pattern}-${density}`] = frame(col, row);
10812
+ });
10813
+ });
10814
+ mapping.none = frame(0, PATTERN_ROWS.length);
10815
+ mapping.solid = frame(1, PATTERN_ROWS.length);
10816
+ return mapping;
10817
+ }
10804
10818
  function createCanvas(w, h) {
10805
10819
  if (typeof OffscreenCanvas !== "undefined") return new OffscreenCanvas(w, h);
10806
10820
  if (typeof document !== "undefined") {
@@ -10825,13 +10839,22 @@ async function loadImage(dataUrl) {
10825
10839
  img.src = dataUrl;
10826
10840
  });
10827
10841
  }
10828
- var atlasPromise;
10829
- function assemblePatternAtlas() {
10830
- if (!atlasPromise) atlasPromise = build();
10831
- return atlasPromise;
10842
+ var atlasPromises = /* @__PURE__ */ new Map();
10843
+ function getPatternAtlas(cell = getPatternCellSize()) {
10844
+ let promise = atlasPromises.get(cell);
10845
+ if (!promise) {
10846
+ promise = build(cell);
10847
+ promise.catch(() => {
10848
+ });
10849
+ atlasPromises.set(cell, promise);
10850
+ }
10851
+ return promise;
10832
10852
  }
10833
- async function build() {
10834
- const canvas = createCanvas(ATLAS_W, ATLAS_H);
10853
+ async function build(cell) {
10854
+ const mapping = getPatternAtlasMapping(cell);
10855
+ const pad = getPatternCellPadding(cell);
10856
+ const pitch = cell + 2 * pad;
10857
+ const canvas = createCanvas(pitch * 3, pitch * (PATTERN_ROWS.length + 1));
10835
10858
  const ctx = canvas.getContext("2d");
10836
10859
  if (!ctx)
10837
10860
  throw new Error(
@@ -10843,21 +10866,28 @@ async function build() {
10843
10866
  images[key] = await loadImage(url);
10844
10867
  })
10845
10868
  );
10846
- for (const [key, frame] of Object.entries(PATTERN_ATLAS_MAPPING)) {
10869
+ for (const [key, frame] of Object.entries(mapping)) {
10847
10870
  const img = images[key];
10848
- if (img) ctx.drawImage(img, frame.x, frame.y, CELL, CELL);
10871
+ if (!img) continue;
10872
+ const srcWidth = img.width;
10873
+ ctx.imageSmoothingEnabled = srcWidth > cell;
10874
+ if ("imageSmoothingQuality" in ctx) ctx.imageSmoothingQuality = "high";
10875
+ ctx.save();
10876
+ ctx.beginPath();
10877
+ ctx.rect(frame.x - pad, frame.y - pad, cell + 2 * pad, cell + 2 * pad);
10878
+ ctx.clip();
10879
+ for (const dx of [-cell, 0, cell]) {
10880
+ for (const dy of [-cell, 0, cell]) {
10881
+ ctx.drawImage(img, frame.x + dx, frame.y + dy, cell, cell);
10882
+ }
10883
+ }
10884
+ ctx.restore();
10849
10885
  }
10850
10886
  if (typeof createImageBitmap !== "undefined")
10851
10887
  return createImageBitmap(canvas);
10852
10888
  return canvas;
10853
10889
  }
10854
10890
 
10855
- // src/fetch-map/pattern-atlas.ts
10856
- function getPatternAtlas() {
10857
- const runtime = globalThis.__CARTO_RUNTIME_ATLAS__ === true;
10858
- return runtime ? assemblePatternAtlas() : BAKED_ATLAS_URL;
10859
- }
10860
-
10861
10891
  // src/fetch-map/parse-map.ts
10862
10892
  function getLayerDescriptor({
10863
10893
  mapConfig,
@@ -11286,9 +11316,13 @@ function createChannelProps(id, layerType, config2, visualChannels, data, datase
11286
11316
  result.fillPatternEnabled = Boolean(visConfig.fillPatternEnabled);
11287
11317
  if (visConfig.filled && visConfig.fillPatternEnabled) {
11288
11318
  result.fillPatternAtlas = getPatternAtlas();
11289
- result.fillPatternMapping = PATTERN_ATLAS_MAPPING;
11319
+ result.fillPatternMapping = getPatternAtlasMapping();
11290
11320
  result.fillPatternMask = true;
11291
- result.getFillPatternScale = visConfig.fillPatternSize ?? 1;
11321
+ const textureParameters = getPatternTextureParameters();
11322
+ if (textureParameters) {
11323
+ result.textureParameters = textureParameters;
11324
+ }
11325
+ result.getFillPatternScale = (visConfig.fillPatternSize ?? 1) * getPatternScaleAdjustment();
11292
11326
  result.fillPattern = visConfig.fillPattern;
11293
11327
  const { fillPatternField, fillPatternScale } = visualChannels;
11294
11328
  const { fillPatternRange, fillPatternDensity } = visConfig;