@carto/api-client 0.5.31 → 0.5.32-alpha.04d6222.126

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CHANGELOG.md +3 -0
  2. package/build/api-client.cjs +295 -3
  3. package/build/api-client.cjs.map +1 -1
  4. package/build/api-client.d.cts +42 -5
  5. package/build/api-client.d.ts +42 -5
  6. package/build/api-client.js +284 -3
  7. package/build/api-client.js.map +1 -1
  8. package/package.json +2 -2
  9. package/src/fetch-map/layer-map.ts +48 -0
  10. package/src/fetch-map/parse-map.ts +117 -10
  11. package/src/fetch-map/pattern-atlas-baked.ts +56 -0
  12. package/src/fetch-map/pattern-atlas-runtime.ts +134 -0
  13. package/src/fetch-map/pattern-atlas.ts +25 -0
  14. package/src/fetch-map/patterns/checker-large.png +0 -0
  15. package/src/fetch-map/patterns/checker-medium.png +0 -0
  16. package/src/fetch-map/patterns/checker-small.png +0 -0
  17. package/src/fetch-map/patterns/cross-hatch-large.png +0 -0
  18. package/src/fetch-map/patterns/cross-hatch-medium.png +0 -0
  19. package/src/fetch-map/patterns/cross-hatch-small.png +0 -0
  20. package/src/fetch-map/patterns/diag-left-large.png +0 -0
  21. package/src/fetch-map/patterns/diag-left-medium.png +0 -0
  22. package/src/fetch-map/patterns/diag-left-small.png +0 -0
  23. package/src/fetch-map/patterns/diag-right-large.png +0 -0
  24. package/src/fetch-map/patterns/diag-right-medium.png +0 -0
  25. package/src/fetch-map/patterns/diag-right-small.png +0 -0
  26. package/src/fetch-map/patterns/dots-large.png +0 -0
  27. package/src/fetch-map/patterns/dots-medium.png +0 -0
  28. package/src/fetch-map/patterns/dots-small.png +0 -0
  29. package/src/fetch-map/patterns/hlines-large.png +0 -0
  30. package/src/fetch-map/patterns/hlines-medium.png +0 -0
  31. package/src/fetch-map/patterns/hlines-small.png +0 -0
  32. package/src/fetch-map/patterns/solid.png +0 -0
  33. package/src/fetch-map/patterns/vlines-large.png +0 -0
  34. package/src/fetch-map/patterns/vlines-medium.png +0 -0
  35. package/src/fetch-map/patterns/vlines-small.png +0 -0
  36. package/src/fetch-map/types.ts +44 -0
  37. package/src/global.d.ts +10 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,9 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ - feat(fetchMap): Support line & polygon stroke dash styles (#297)
6
+ - feat(fetchMap): Support polygon fill patterns (inline sprite atlas, `getFillPattern`/`scales.fillPattern`, `fillPatternEnabled`)
7
+
5
8
  ### 0.5.31
6
9
 
7
10
  - feat(sources): rename `featureBbox` source option to `prepareLabels` (Maps API `featureBbox` param unchanged)
@@ -172,10 +172,12 @@ __export(src_exports, {
172
172
  getColumnNameFromGeoColumn: () => getColumnNameFromGeoColumn,
173
173
  getDataFilterExtensionProps: () => getDataFilterExtensionProps,
174
174
  getDefaultAggregationExpColumnAliasForLayerType: () => getDefaultAggregationExpColumnAliasForLayerType,
175
+ getFillPatternAccessor: () => getFillPatternAccessor,
175
176
  getFilter: () => getFilter,
176
177
  getIconUrlAccessor: () => getIconUrlAccessor,
177
178
  getLayerDescriptor: () => getLayerDescriptor,
178
179
  getLayerProps: () => getLayerProps,
180
+ getLineStyleAccessor: () => getLineStyleAccessor,
179
181
  getMaxMarkerSize: () => getMaxMarkerSize,
180
182
  getSizeAccessor: () => getSizeAccessor,
181
183
  getSorter: () => getSorter,
@@ -10150,6 +10152,34 @@ function getIconUrlAccessor(field, range, {
10150
10152
  };
10151
10153
  return normalizeAccessor(accessor, data);
10152
10154
  }
10155
+ function getLineStyleAccessor(field, range, data) {
10156
+ const fallback = range.othersDashArray ?? [0, 0];
10157
+ const mapping = {};
10158
+ for (const { value, dashArray } of range.dashArrayMap) {
10159
+ mapping[value] = dashArray;
10160
+ }
10161
+ const accessor = (properties) => mapping[properties[field.name]] ?? fallback;
10162
+ return {
10163
+ accessor: normalizeAccessor(accessor, data),
10164
+ domain: range.dashArrayMap.map(({ value }) => value),
10165
+ range: range.dashArrayMap.map(({ dashArray }) => dashArray)
10166
+ };
10167
+ }
10168
+ function getFillPatternAccessor(field, range, density, data) {
10169
+ const d = density ?? "medium";
10170
+ const toKey = (pattern) => pattern === "solid" || pattern === "none" ? pattern : `${pattern}-${d}`;
10171
+ const fallback = toKey(range.othersPattern ?? "none");
10172
+ const mapping = {};
10173
+ for (const { value, pattern } of range.patternMap) {
10174
+ mapping[value] = toKey(pattern);
10175
+ }
10176
+ const accessor = (properties) => mapping[properties[field.name]] ?? fallback;
10177
+ return {
10178
+ accessor: normalizeAccessor(accessor, data),
10179
+ domain: range.patternMap.map(({ value }) => value),
10180
+ range: range.patternMap.map(({ pattern }) => pattern)
10181
+ };
10182
+ }
10153
10183
  function getMaxMarkerSize(visConfig, visualChannels) {
10154
10184
  const { radiusRange, radius, sizeMaxPixels } = visConfig;
10155
10185
  const { radiusField, sizeField } = visualChannels;
@@ -10641,6 +10671,194 @@ init_cjs_shims();
10641
10671
 
10642
10672
  // src/fetch-map/parse-map.ts
10643
10673
  init_cjs_shims();
10674
+
10675
+ // src/fetch-map/pattern-atlas.ts
10676
+ init_cjs_shims();
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
+ // src/fetch-map/patterns/hlines-large.png
10714
+ var hlines_large_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAABBSURBVHic7dixAQAgDMOwwP8/wxfNUOkCz04AYK2T5LUjmm47AAAAAOb5Ae0AAAAAmOcHtAMAAABgnh/QDgAAaj69GwQJx6ek3QAAAABJRU5ErkJggg==";
10715
+
10716
+ // src/fetch-map/patterns/hlines-medium.png
10717
+ var hlines_medium_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAABOSURBVHic7daxAQAgDMOwwv8/wxkeKl3gLTkz8wYAVjrbZ/DWAQDQ8QPqAADo+AF1AAB0/IA6AAA6fkAdAAAdP6AOAICOH1AHAEBn/Q/4F6kJD4qx2asAAAAASUVORK5CYII=";
10718
+
10719
+ // src/fetch-map/patterns/hlines-small.png
10720
+ var hlines_small_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAABrSURBVHic7dSxAQAgDMOwwv8/wxkeKl3gJTkz8wbWOtsncOsAaPmAOgBaPqAOgJYPqAOg5QPqAGj5gDoAWj6gDoCWD6gDoOUD6gBo+YA6AFo+oA6Alg+oA6DlA+oAaPmAOgBaPqAOgNb6D/gRbhEfmYiEGgAAAABJRU5ErkJggg==";
10721
+
10722
+ // src/fetch-map/patterns/vlines-large.png
10723
+ var vlines_large_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAACkSURBVHic7dAxCsAwEMRAk///2W5Sp7CLMUGCK28RGuOb+d4u1/8/B+O/oABaQFMALaApgBbQFEALaAqgBTQF0AKaAmgBTQG0gKYAWkBTAC2gKYAW0BRAC2gKoAU0BdACmgJoAU0BtICmAFpAUwAtoCmAFtAUQAtoCqAFNAXQApoCaAFNAbSApgBaQFMALaApgBbQFEALaAqgBTQF0AKaAmgBzQIgxAh3o/Zl8AAAAABJRU5ErkJggg==";
10724
+
10725
+ // src/fetch-map/patterns/vlines-medium.png
10726
+ var vlines_medium_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAACfSURBVHic7dCxDYBQAITQi/vv/J1A25cotDSEbTt75nzdXy/yFzRAB2gaoAM0DdABmgboAE0DdICmATpA0wAdoGmADtA0QAdoGqADNA3QAZoG6ABNA3SApgE6QNMAHaBpgA7QNEAHaBqgAzQN0AGaBugATQN0gKYBOkDTAB2gaYAO0DRAB2gaoAM0DdABmgboAE0DdICmATpA0wAdoLkBMJgQb6A8qDAAAAAASUVORK5CYII=";
10727
+
10728
+ // src/fetch-map/patterns/vlines-small.png
10729
+ var vlines_small_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAACcSURBVHic7dCxDcAwAMMwo///nIw9gUPEzZuhbTv7ndf2t8cVQB/QCqAPaAXQB7QC6ANaAfQBrQD6gFYAfUArgD6gFUAf0AqgD2gF0Ae0AugDWgH0Aa0A+oBWAH1AK4A+oBVAH9AKoA9oBdAHtALoA1oB9AGtAPqAVgB9QCuAPqAVQB/QCqAPaAXQB7QC6ANaAfQBrQD6gFYAfUC7UEAgXxU1dpkAAAAASUVORK5CYII=";
10730
+
10731
+ // src/fetch-map/patterns/diag-left-large.png
10732
+ var diag_left_large_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAACtSURBVHic7dkxCsMwEETRuf/lfKSkmBCiflUseR/cDuYhN3KSvD7PVM+FzfxsPsOb3+F/RTiGIUCAACEQzmEIECBACIRzGAIECBAC4RyGAGEpwvQd2zaE8eOwDeHKN7EJIYHQIEBoECA0CBAaBAgNAoQGAUKDAKFBgNAgbEWYltiGcOU4bEJY9QfmBkICoUGA0CBAaBAgNAgQGgQIDQKEBgFCgwChrUWYfOF1CG/KcyXf7pwUyQAAAABJRU5ErkJggg==";
10733
+
10734
+ // src/fetch-map/patterns/diag-left-medium.png
10735
+ var diag_left_medium_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAAD+SURBVHic7dqxDYAwDADB7L9cRoIGaiQk81cQKZ3l+wG81lrH9Z/ePbcf5vaLnaVPRJQ+EVH7RETtExG1T0TUPhFR+0RE7RMRtU9EjPtEROgTEaVPRJQ+EVH7RETtExG1T0TUPhFR+0RE7RMRn/hEROgTEaVPRJQ+EVH7RETtExG1T0TUPhFR+0RE7RMRtU9EjPtEROgTEaVPRJQ+EVH7RETtExG1T0TUPhFR+0RE7RMRtU9EjPtEROgTEaVPRJQ+EVH7RETtExG1T0TUPhFR+0RE7RMR/33Afx8w7xMRpU9E1D4RUftERO0TEbVPRNQ+EVH7RETtExHjPhFR+SdUtUu99aAoTAAAAABJRU5ErkJggg==";
10736
+
10737
+ // src/fetch-map/patterns/diag-left-small.png
10738
+ var diag_left_small_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAADqSURBVHic7dgxCsMwAARB/f9zflLS2JDC/U7gDG4EA4s63TnnfO7/+a6Xs/Nzdr2c/bMnIkpPRNSeiMg8ERF6IqL0RETpiYjaExG1JyIST0SEnogoPRFReiKi9kRE5omI0BMRpSciSk9E1J6IyDwREXoiYnvAXoG7hNwTEYknIkJPRJSeiCg9EVF7ImJ7wPaAxhMRpSciak9EZJ6ICD0RsT1gr8BdQu6JiMQTEaEnIkpPRJSeiKg9EbE9YHtA44mI0hMRtSciMk9EhJ6I2B6wV+AuIfdEROKJiNATEaUnIkpPRNSeiNgeUPgvaSqXeT0fItoAAAAASUVORK5CYII=";
10739
+
10740
+ // src/fetch-map/patterns/diag-right-large.png
10741
+ var diag_right_large_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAAClSURBVHic7djBCQMgFAXB339zlmQuOaSAFSLOFvBwEC/OzOzpWt+9cnN+NteBzawb8dlZ4eHb4OH7TfgiePg2ePh+E74IHr4NHr7fhK9HT2z+O37N4/jafh3+yFOCjzfho+Dhw+Dh+034KHj4MHj4fhM+Ch4+DP5V/DyO3/M4/shTugmfXT48fBc8fBs8fDwIHwUP3wYPHw/CR8HDt8HH33hP4/cHynMl31YK/QUAAAAASUVORK5CYII=";
10742
+
10743
+ // src/fetch-map/patterns/diag-right-medium.png
10744
+ var diag_right_medium_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAADKSURBVHic7doxCsMwEAXRf//L6UhKkyJVVmkyRn8M6pYdHhg3VpLszM9+nzXMrY/Z0510H43T+HFWvHggTvfFiwfidF98Kz7l+J1y/Dh3O/5rX7x4IE73xYsH4nS/Gp9y/Eo5/mTf1fhxp3jxQJzuixcPxOm++FZ8yvE75fif3pAb8cffB/H/jtN98eKBON0XLx6IP6Bfjd8px49zt+P9Y/TION0XLx6I033xrfiU470fcLDvavy4U7x4IE73xYsH4nRffCs+5fj9AlS1S72cv9TCAAAAAElFTkSuQmCC";
10745
+
10746
+ // src/fetch-map/patterns/diag-right-small.png
10747
+ var diag_right_small_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAADbSURBVHic7dgxCsNAEMXQuf/lfCSnCdiFqx01AqXLwgP90jMzc8/zu/7/32/zers+3uxeHY95dXzjd14dT3h1POHV8ahXxze+8cdeHU94dTzh1fGYV8c3fufV8YRXxxNeHY95dXzjd14d3z0A8Op41KvjG9/47gGnXh1PeHV8n8SN33t1POHV8YRXx2NeHd/4nVfHdw8AvDoe9er4xje+e8CpV8cTXh3fJ3Hj914dT3h1POHV8ZhXxzd+59Xx3QMAr45HvTq+8Y3vHnDq1fGEV8f3Sdz4vVfHr/0PaSqXeV716iAAAAAASUVORK5CYII=";
10748
+
10749
+ // src/fetch-map/patterns/cross-hatch-large.png
10750
+ var cross_hatch_large_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAALoSURBVHic1ZpdUiwxCIUpV3D3/zJL0qXcHeiLsVokCT8fPRmq5kErnOGcTgMKIiKf3x/CHhc8ClMU5juMiQX8UEFSIliYVRH+cK6KcCX/7/t3hAgW4aoIU65ZESzywyoirIhmRdhyjIqwIj8sI4KHYFQENzfvQQ/5YRERIsS8Z8O3e+cQIT/MI0Lmau980vlt5pghP2wlQiW5zXzLFU4DVMgPs0QgypvGwPqRT+OTJT/s3cAkGhwrVsRI8sPIxuZqOHnd3lLAd2CWhdXvPBXwNUCqbdaxlUWYJbyqCFZgVRFmMaVF2GX7rAirgLIi7GIJi+AtdVERPIFERfDG4BYhWufxAAIi4A8g2+TgV9AhAv4KVjs8PAktRMCTMNHeWoERtViL0FGGEfIaGGtEJm0zYT9YVKAamAq0C/NxFYASQT8pIuAOzIfGIkTQGETAGoNom6c5ryLCzLciwsy3IsI24WdE2PlkRNj5ZERwV7uICN6zERG8ZyMihEu9h1j0tniIRW+LR4R0n7MimM0XK4LZfLESodzkWUSrFcMiWq0YlghUh/uLMNUzWLW9Wt+v8WHkrYDp8TTV3IjRNm/Jv0FffIp9qJ//E6Cv8gq07Ce8ShJs2U94lTLYsp/wKo1Qy35ChJj3bISY92zLfkLmau98Mld759Oyn1BJbjPfSnKb+bbsJxDlTWMQ5U1jtOwnkB0eXdtnmOR+AkZ+GEnewqT3E9Bg9ZMihO3eTzh3Pn/TfoLIifP5m/cTRE6azz9pP0HkhPn8k/cTRJ45nz9kP0HkGfP5w/YTRO6czx+6nyBy03z+5P0EkRvm8wT5GSbW4dLkxfgfHmV4rFpVAthqb4/8Y0wDdc3nCRE0RlmEGUDXfL4iwsw3LcLOsWs+nxFh5xMWwevQNZ+PiOA96xYhqlbXfN5DLHpbttyy70vXfH5FMJsvphyrGbNrPm8RrVaMP1ypmtk1n78SpnqGX5zJrik8n3ca3TD9YH4B52HxPNYfWfcAAAAASUVORK5CYII=";
10751
+
10752
+ // src/fetch-map/patterns/cross-hatch-medium.png
10753
+ var cross_hatch_medium_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAAKASURBVHic7ZpNbgMxCIWtnqD33+RI7VF6g2STSg4/D2zTAaIiZVEb8zEeG/WhGWOM+/OH7D79voDfjfh6Y2byzQUzGCVxU3ytB8rmywMCHI3N8M/nmJaExIrk/9oKX5xAuz3PSQ+vJYHedgSf2gqfOVj3jfrSh5eSsO7mCV+zFT4LjIzeuYiY6XxvYaLVFiXhjZnOp4G0BdKd15KgMVB1TuV7A6CC530AKYlU/s4R0gqe97hJhSmLv1xENLjki8z6x+YqvuksFRwP3Howb8y/5sPCRO8cSoLOoSTmuWz+0DZBKzhSElpiUhLSWDafJYGqLQVaR3MGoreSzWdJWAXHey+pL7qXl/M/iOM3+fvHCBxtqfyuej6EX0nPX86vpOcz+GbBuUrPZ/FNRxrYMq9vlX6CmYS32Kz4VuonvCxsq+cP+UsByun5ID5bgI5QJT0fyWcLkFXR86F8765Kvpq16SdQB5TEPJet50P42oSUhDSWreeP+NbRmIHorWTr+V2+q+B472W7fgLtB5xay35C1BHs2k+Am+AtQt37CeIE2u15LlvPR/GZg1VwqO879BNYYGRV9Hwo31uYKun5MD4NpC2oqOeP+d4AlfX8Nn/nCFXV8zv85SJSWs9v8E3nNnp+k/8eev6AP7RNaKPnA/gsiU56PorPkrAKjvdeUt9S/YT/7wMm66rnQ/in39ufFqEy3wdQ66Tnd/lmEemk53f4piMNbJnXt0o/wUzCW2xWfCv1E14WttXzh/ylAOX0fBCfLUBHqJKej+SzBciq6PlQvndXJV/N2vQTqANKYp7L1vMhfG1CSkIay9bzR3zraMxA9Fay9fwu31VwvPeyXT/hAZMuKfjIf3HUAAAAAElFTkSuQmCC";
10754
+
10755
+ // src/fetch-map/patterns/cross-hatch-small.png
10756
+ var cross_hatch_small_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAAHqSURBVHic7ZhRagMxDERFT5D7/+RI26PkBu5PFipZirqmE41aB/wRR89LhoG3WERkPJeIyP3b93NPzN7h7HXmp4POoZ/sRasTPyV0e+4dBvZmGXm5ytvaDGcw2jv+AK+S9wa86niHVfPRH8z45YrdzYO68uoQm1S0vNp15aeEXmnGPuTWnJcPufb5NN8fzXmRxQp18nzGq9qIGfT2qj3/2+8J6gcvqWpPo/k2nke9J4QVYfE0nLepDDJPo3mVBpun4bx9D2Dz9Ft4rxZMnkbzUwjVnn47z+5pNK+S8wa6eH6Vv1wxrzmdeXWITSpanTyf8VNCVJ5G8//9PuAhixXq5PmMV7URM+jttfN8wqthL6lqT+/7ADAf1obF03DepjLIPI3mVRp0nkbz+z4gqAWTp9H8FAKbp+E8u6fRvErOG6j29L4PAPPqEJtUtDp5PuOnhKg8jeb3fcBihTp5PuNVbcQMenvtPJ/wathLqtrT+z4AzIe1YfE0nLepDDJPo3mVBp2n0fy+DwhqweRpND+FcH5YPA3n2T2N5tOBak/v+wAwrw6xSUWrk+czfkqIytNoft8HLFaok+czXtVGzOCrvTaeT3g17CVV7Wma+4DoAeyez/iwNiyehvM2lUHmaTSv0rBDXkitPJ/xX9QhcjSKhBtGAAAAAElFTkSuQmCC";
10757
+
10758
+ // src/fetch-map/patterns/dots-large.png
10759
+ var dots_large_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAABJSURBVHic7dixEQAgDAMxH/vvDDskBReQ+h/ATpKduv1ADwAAwJduz9Gr/WrEAAAAMNjoPe8PAAAAgJLRe94fAAAAACWj93y3PwvzJ98DYTY6AAAAAElFTkSuQmCC";
10760
+
10761
+ // src/fetch-map/patterns/dots-medium.png
10762
+ var dots_medium_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAABdSURBVHic7daxDcBADAMxI/vv/Jkg6YQXYLLVAKeZmTPfzoIdgNVuZ+jq/vyMALBAdaf9AACIqu60HwAAUdWd9gMAIKq6034AAERVd9oPAICo6k77AQAQVd3p9P4CKgaPf9S3g48AAAAASUVORK5CYII=";
10763
+
10764
+ // src/fetch-map/patterns/dots-small.png
10765
+ var dots_small_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAAB8SURBVHic7dSxDQAxDAMx4/ffOSl/A0WAyc69TzMzZ35n4c16r1/w6f0NrFfVpA2AuKombQDEVTVpAyCuqkkbAHFVTdoAiKtq0gZAXFWTNgDiqpq0ARBX1aQNgLiqJm0AxFU1aQMgrqpJGwBxVU3aAIiratIGQFxVk+n7ApyMHh3vKZDHAAAAAElFTkSuQmCC";
10766
+
10767
+ // src/fetch-map/patterns/checker-large.png
10768
+ var checker_large_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAAC7SURBVHic7dhRCsJQEMXQV/e/57oD56scHZPfciGEFnGuc859PnMNz396/xrG6ymAFtBM39fR3+jT+79/AwqgBTQF0AKaAmgBzfXtv9P9F3iYAmgBTQG0gKYAWkDTPWAYr6cAWkBTAC2gKYAW0HQPGMbrKYAW0BRAC2gKoAU03QOG8XoKoAU0BdACmgJoAU33gGG8ngJoAU0BtICmAFpA0z1gGK+nAFpAUwAtoCmAFtB0DxjG6ymAFtC8AfltJHRjA+VQAAAAAElFTkSuQmCC";
10769
+
10770
+ // src/fetch-map/patterns/checker-medium.png
10771
+ var checker_medium_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAACpSURBVHic7dYxDoNAAAPBvfz/z6EOD2AjvNOhayzDCR/gy69ze371+Ydx97aw38jT5/NfQAXYAWzn3+5kf4GHVYAdwNYOYFwF2AFs7QDGVYAdwNYOYFwF2AFs7QDGVYAdwNYOYFwF2AFs7QDGVYAdwNYOYFwF2AFs7QDGVYAdwNYOYFwF2AFs7QDGVYAdwNYOYFwF2AFs7QDGVYAdwNYOYFwF2AFs7QDGXajSiGiQ1/fcAAAAAElFTkSuQmCC";
10772
+
10773
+ // src/fetch-map/patterns/checker-small.png
10774
+ var checker_small_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAACgSURBVHic7dRBCoNQFEPR1P3vuZ1UEBcQAv8ccPB0am6SfP/P7aj78/rwfHfEfYWtX7J9H/8HaEDY2qQGlGlA2NqkBpRpQNjapAaUaUDY2qQGlGlA2NqkBpRpQNjapAaUaUDY2qQGlGlA2NqkBpRpQNjapAaUaUDY2qQGlGlA2NqkBpRpQNjapAaUaUDY2qQGlGlA2NqkBpRpQNjaZPv+AQpgHkxA3R9BAAAAAElFTkSuQmCC";
10775
+
10776
+ // src/fetch-map/patterns/solid.png
10777
+ var solid_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAACWSURBVHic7dBBEcAwAMOwrPw5dzD0qIXA52/b3cOODtAaoAO0BugArQE6QGuADtAaoAO0BugArQE6QGuADtAaoAO0BugArQE6QGuADtAaoAO0BugArQE6QGuADtAaoAO0BugArQE6QGuADtAaoAO0BugArQE6QGuADtAaoAO0BugArQE6QGuADtAaoAO0BugArQE6QPsBULQBfwAqZPkAAAAASUVORK5CYII=";
10778
+
10779
+ // src/fetch-map/pattern-atlas-runtime.ts
10780
+ var CELL_URLS = {
10781
+ "hlines-large": hlines_large_default,
10782
+ "hlines-medium": hlines_medium_default,
10783
+ "hlines-small": hlines_small_default,
10784
+ "vlines-large": vlines_large_default,
10785
+ "vlines-medium": vlines_medium_default,
10786
+ "vlines-small": vlines_small_default,
10787
+ "diag-left-large": diag_left_large_default,
10788
+ "diag-left-medium": diag_left_medium_default,
10789
+ "diag-left-small": diag_left_small_default,
10790
+ "diag-right-large": diag_right_large_default,
10791
+ "diag-right-medium": diag_right_medium_default,
10792
+ "diag-right-small": diag_right_small_default,
10793
+ "cross-hatch-large": cross_hatch_large_default,
10794
+ "cross-hatch-medium": cross_hatch_medium_default,
10795
+ "cross-hatch-small": cross_hatch_small_default,
10796
+ "dots-large": dots_large_default,
10797
+ "dots-medium": dots_medium_default,
10798
+ "dots-small": dots_small_default,
10799
+ "checker-large": checker_large_default,
10800
+ "checker-medium": checker_medium_default,
10801
+ "checker-small": checker_small_default,
10802
+ solid: solid_default
10803
+ };
10804
+ function createCanvas(w, h) {
10805
+ if (typeof OffscreenCanvas !== "undefined") return new OffscreenCanvas(w, h);
10806
+ if (typeof document !== "undefined") {
10807
+ const c = document.createElement("canvas");
10808
+ c.width = w;
10809
+ c.height = h;
10810
+ return c;
10811
+ }
10812
+ throw new Error(
10813
+ "carto-api-client: no Canvas available to assemble the pattern atlas"
10814
+ );
10815
+ }
10816
+ async function loadImage(dataUrl) {
10817
+ if (typeof createImageBitmap !== "undefined" && typeof fetch !== "undefined") {
10818
+ const blob = await (await fetch(dataUrl)).blob();
10819
+ return createImageBitmap(blob);
10820
+ }
10821
+ return new Promise((resolve, reject) => {
10822
+ const img = new Image();
10823
+ img.onload = () => resolve(img);
10824
+ img.onerror = reject;
10825
+ img.src = dataUrl;
10826
+ });
10827
+ }
10828
+ var atlasPromise;
10829
+ function assemblePatternAtlas() {
10830
+ if (!atlasPromise) atlasPromise = build();
10831
+ return atlasPromise;
10832
+ }
10833
+ async function build() {
10834
+ const canvas = createCanvas(ATLAS_W, ATLAS_H);
10835
+ const ctx = canvas.getContext("2d");
10836
+ if (!ctx)
10837
+ throw new Error(
10838
+ "carto-api-client: 2D context unavailable for pattern atlas"
10839
+ );
10840
+ const images = {};
10841
+ await Promise.all(
10842
+ Object.entries(CELL_URLS).map(async ([key, url]) => {
10843
+ images[key] = await loadImage(url);
10844
+ })
10845
+ );
10846
+ for (const [key, frame] of Object.entries(PATTERN_ATLAS_MAPPING)) {
10847
+ const img = images[key];
10848
+ if (img) ctx.drawImage(img, frame.x, frame.y, CELL, CELL);
10849
+ }
10850
+ if (typeof createImageBitmap !== "undefined")
10851
+ return createImageBitmap(canvas);
10852
+ return canvas;
10853
+ }
10854
+
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
+ // src/fetch-map/parse-map.ts
10644
10862
  function getLayerDescriptor({
10645
10863
  mapConfig,
10646
10864
  layer,
@@ -10863,6 +11081,10 @@ function createChannelProps(id, layerType, config2, visualChannels, data, datase
10863
11081
  const result = {};
10864
11082
  const updateTriggers = {};
10865
11083
  const scales = {};
11084
+ const isVectorTile = layerType === "mvt" || layerType === "tileset";
11085
+ const geometry = data.tilestats?.layers?.[0]?.geometry;
11086
+ const isLine = geometry === "Line" || geometry === "LineString" || geometry === "MultiLineString";
11087
+ const isPolygon = geometry === "Polygon" || geometry === "MultiPolygon";
10866
11088
  {
10867
11089
  const { colorField, colorScale } = visualChannels;
10868
11090
  const { colorRange } = visConfig;
@@ -11023,6 +11245,76 @@ function createChannelProps(id, layerType, config2, visualChannels, data, datase
11023
11245
  };
11024
11246
  }
11025
11247
  }
11248
+ {
11249
+ const strokeVisible = isLine || isPolygon && Boolean(visConfig.stroked);
11250
+ if (isVectorTile && strokeVisible) {
11251
+ const { lineStyleField, lineStyleScale } = visualChannels;
11252
+ const { lineStyleRange } = visConfig;
11253
+ if (visConfig.lineStyle && visConfig.lineStyle !== "solid") {
11254
+ if (visConfig.lineStyle === "dotted") {
11255
+ result.lineCapRounded = true;
11256
+ }
11257
+ result.lineStyle = visConfig.lineStyle;
11258
+ if (visConfig.dashArray) {
11259
+ result.dashArray = visConfig.dashArray;
11260
+ result.getDashArray = visConfig.dashArray;
11261
+ }
11262
+ }
11263
+ if (lineStyleField && lineStyleScale && lineStyleRange) {
11264
+ const { accessor, ...scaleProps } = getLineStyleAccessor(
11265
+ lineStyleField,
11266
+ lineStyleRange,
11267
+ data
11268
+ );
11269
+ result.getDashArray = accessor;
11270
+ scales.lineStyle = updateTriggers.getDashArray = {
11271
+ field: lineStyleField,
11272
+ type: lineStyleScale,
11273
+ ...scaleProps
11274
+ };
11275
+ const dashArrays = [
11276
+ ...lineStyleRange.dashArrayMap.map(({ dashArray }) => dashArray),
11277
+ ...lineStyleRange.othersDashArray ? [lineStyleRange.othersDashArray] : []
11278
+ ];
11279
+ if (dashArrays.some(([dash]) => dash === 0)) {
11280
+ result.lineCapRounded = true;
11281
+ }
11282
+ }
11283
+ }
11284
+ }
11285
+ {
11286
+ result.fillPatternEnabled = Boolean(visConfig.fillPatternEnabled);
11287
+ if (visConfig.filled && visConfig.fillPatternEnabled) {
11288
+ result.fillPatternAtlas = getPatternAtlas();
11289
+ result.fillPatternMapping = PATTERN_ATLAS_MAPPING;
11290
+ result.fillPatternMask = true;
11291
+ result.textureParameters = {
11292
+ magFilter: "nearest",
11293
+ minFilter: "linear"
11294
+ };
11295
+ result.getFillPatternScale = visConfig.fillPatternSize ?? 1;
11296
+ result.fillPattern = visConfig.fillPattern;
11297
+ const { fillPatternField, fillPatternScale } = visualChannels;
11298
+ const { fillPatternRange, fillPatternDensity } = visConfig;
11299
+ if (fillPatternField && fillPatternScale && fillPatternRange) {
11300
+ const { accessor, ...scaleProps } = getFillPatternAccessor(
11301
+ fillPatternField,
11302
+ fillPatternRange,
11303
+ fillPatternDensity,
11304
+ data
11305
+ );
11306
+ result.getFillPattern = accessor;
11307
+ scales.fillPattern = updateTriggers.getFillPattern = {
11308
+ field: fillPatternField,
11309
+ type: fillPatternScale,
11310
+ ...scaleProps
11311
+ };
11312
+ } else {
11313
+ const key = `${visConfig.fillPattern}-${fillPatternDensity ?? "medium"}`;
11314
+ result.getFillPattern = () => key;
11315
+ }
11316
+ }
11317
+ }
11026
11318
  {
11027
11319
  const { heightField, heightScale } = visualChannels;
11028
11320
  const { enable3d, heightRange } = visConfig;
@@ -11151,9 +11443,7 @@ function createChannelProps(id, layerType, config2, visualChannels, data, datase
11151
11443
  } = secondaryLabel || {};
11152
11444
  result.getText = mainLabel.field && getTextAccessor(mainLabel.field, data);
11153
11445
  const getSecondaryText = secondaryField && getTextAccessor(secondaryField, data);
11154
- const geometry = data.tilestats?.layers?.[0]?.geometry;
11155
- const isLineOrPolygon = geometry === "Polygon" || geometry === "MultiPolygon" || geometry === "Line" || geometry === "LineString" || geometry === "MultiLineString";
11156
- if (isLineOrPolygon && (layerType === "tileset" || layerType === "mvt")) {
11446
+ if ((isLine || isPolygon) && isVectorTile) {
11157
11447
  const uniqueIdProperty = visConfig.textLabelUniqueIdField;
11158
11448
  result.autoLabels = uniqueIdProperty ? { uniqueIdProperty } : true;
11159
11449
  result.pointType = "text";
@@ -11935,10 +12225,12 @@ function hashBuckets(initialCount) {
11935
12225
  getColumnNameFromGeoColumn,
11936
12226
  getDataFilterExtensionProps,
11937
12227
  getDefaultAggregationExpColumnAliasForLayerType,
12228
+ getFillPatternAccessor,
11938
12229
  getFilter,
11939
12230
  getIconUrlAccessor,
11940
12231
  getLayerDescriptor,
11941
12232
  getLayerProps,
12233
+ getLineStyleAccessor,
11942
12234
  getMaxMarkerSize,
11943
12235
  getSizeAccessor,
11944
12236
  getSorter,