@carto/api-client 0.5.31 → 0.5.32-alpha.13acc23.123

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 +300 -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 +289 -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 +108 -10
  11. package/src/fetch-map/pattern-atlas-baked.ts +56 -0
  12. package/src/fetch-map/pattern-atlas-runtime.ts +139 -0
  13. package/src/fetch-map/pattern-atlas.ts +21 -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,203 @@ 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
+ async function toDataURL(canvas) {
10829
+ if ("convertToBlob" in canvas) {
10830
+ const blob = await canvas.convertToBlob({ type: "image/png" });
10831
+ return new Promise((resolve) => {
10832
+ const reader = new FileReader();
10833
+ reader.onload = () => resolve(reader.result);
10834
+ reader.readAsDataURL(blob);
10835
+ });
10836
+ }
10837
+ return canvas.toDataURL("image/png");
10838
+ }
10839
+ var atlasPromise;
10840
+ function assemblePatternAtlas() {
10841
+ if (!atlasPromise) atlasPromise = build();
10842
+ return atlasPromise;
10843
+ }
10844
+ async function build() {
10845
+ const canvas = createCanvas(ATLAS_W, ATLAS_H);
10846
+ const ctx = canvas.getContext("2d");
10847
+ if (!ctx)
10848
+ throw new Error(
10849
+ "carto-api-client: 2D context unavailable for pattern atlas"
10850
+ );
10851
+ const images = {};
10852
+ await Promise.all(
10853
+ Object.entries(CELL_URLS).map(async ([key, url]) => {
10854
+ images[key] = await loadImage(url);
10855
+ })
10856
+ );
10857
+ for (const [key, frame] of Object.entries(PATTERN_ATLAS_MAPPING)) {
10858
+ const img = images[key];
10859
+ if (img) ctx.drawImage(img, frame.x, frame.y, CELL, CELL);
10860
+ }
10861
+ return toDataURL(canvas);
10862
+ }
10863
+
10864
+ // src/fetch-map/pattern-atlas.ts
10865
+ function getPatternAtlas() {
10866
+ const runtime = globalThis.__CARTO_RUNTIME_ATLAS__ === true;
10867
+ return runtime ? assemblePatternAtlas() : BAKED_ATLAS_URL;
10868
+ }
10869
+
10870
+ // src/fetch-map/parse-map.ts
10644
10871
  function getLayerDescriptor({
10645
10872
  mapConfig,
10646
10873
  layer,
@@ -10863,6 +11090,10 @@ function createChannelProps(id, layerType, config2, visualChannels, data, datase
10863
11090
  const result = {};
10864
11091
  const updateTriggers = {};
10865
11092
  const scales = {};
11093
+ const isVectorTile = layerType === "mvt" || layerType === "tileset";
11094
+ const geometry = data.tilestats?.layers?.[0]?.geometry;
11095
+ const isLine = geometry === "Line" || geometry === "LineString" || geometry === "MultiLineString";
11096
+ const isPolygon = geometry === "Polygon" || geometry === "MultiPolygon";
10866
11097
  {
10867
11098
  const { colorField, colorScale } = visualChannels;
10868
11099
  const { colorRange } = visConfig;
@@ -11023,6 +11254,72 @@ function createChannelProps(id, layerType, config2, visualChannels, data, datase
11023
11254
  };
11024
11255
  }
11025
11256
  }
11257
+ {
11258
+ const strokeVisible = isLine || isPolygon && Boolean(visConfig.stroked);
11259
+ if (isVectorTile && strokeVisible) {
11260
+ const { lineStyleField, lineStyleScale } = visualChannels;
11261
+ const { lineStyleRange } = visConfig;
11262
+ if (visConfig.lineStyle && visConfig.lineStyle !== "solid") {
11263
+ if (visConfig.lineStyle === "dotted") {
11264
+ result.lineCapRounded = true;
11265
+ }
11266
+ result.lineStyle = visConfig.lineStyle;
11267
+ if (visConfig.dashArray) {
11268
+ result.dashArray = visConfig.dashArray;
11269
+ result.getDashArray = visConfig.dashArray;
11270
+ }
11271
+ }
11272
+ if (lineStyleField && lineStyleScale && lineStyleRange) {
11273
+ const { accessor, ...scaleProps } = getLineStyleAccessor(
11274
+ lineStyleField,
11275
+ lineStyleRange,
11276
+ data
11277
+ );
11278
+ result.getDashArray = accessor;
11279
+ scales.lineStyle = updateTriggers.getDashArray = {
11280
+ field: lineStyleField,
11281
+ type: lineStyleScale,
11282
+ ...scaleProps
11283
+ };
11284
+ const dashArrays = [
11285
+ ...lineStyleRange.dashArrayMap.map(({ dashArray }) => dashArray),
11286
+ ...lineStyleRange.othersDashArray ? [lineStyleRange.othersDashArray] : []
11287
+ ];
11288
+ if (dashArrays.some(([dash]) => dash === 0)) {
11289
+ result.lineCapRounded = true;
11290
+ }
11291
+ }
11292
+ }
11293
+ }
11294
+ {
11295
+ result.fillPatternEnabled = Boolean(visConfig.fillPatternEnabled);
11296
+ if (visConfig.filled && visConfig.fillPatternEnabled) {
11297
+ result.fillPatternAtlas = getPatternAtlas();
11298
+ result.fillPatternMapping = PATTERN_ATLAS_MAPPING;
11299
+ result.fillPatternMask = true;
11300
+ result.getFillPatternScale = visConfig.fillPatternSize ?? 1;
11301
+ result.fillPattern = visConfig.fillPattern;
11302
+ const { fillPatternField, fillPatternScale } = visualChannels;
11303
+ const { fillPatternRange, fillPatternDensity } = visConfig;
11304
+ if (fillPatternField && fillPatternScale && fillPatternRange) {
11305
+ const { accessor, ...scaleProps } = getFillPatternAccessor(
11306
+ fillPatternField,
11307
+ fillPatternRange,
11308
+ fillPatternDensity,
11309
+ data
11310
+ );
11311
+ result.getFillPattern = accessor;
11312
+ scales.fillPattern = updateTriggers.getFillPattern = {
11313
+ field: fillPatternField,
11314
+ type: fillPatternScale,
11315
+ ...scaleProps
11316
+ };
11317
+ } else {
11318
+ const key = `${visConfig.fillPattern}-${fillPatternDensity ?? "medium"}`;
11319
+ result.getFillPattern = () => key;
11320
+ }
11321
+ }
11322
+ }
11026
11323
  {
11027
11324
  const { heightField, heightScale } = visualChannels;
11028
11325
  const { enable3d, heightRange } = visConfig;
@@ -11151,9 +11448,7 @@ function createChannelProps(id, layerType, config2, visualChannels, data, datase
11151
11448
  } = secondaryLabel || {};
11152
11449
  result.getText = mainLabel.field && getTextAccessor(mainLabel.field, data);
11153
11450
  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")) {
11451
+ if ((isLine || isPolygon) && isVectorTile) {
11157
11452
  const uniqueIdProperty = visConfig.textLabelUniqueIdField;
11158
11453
  result.autoLabels = uniqueIdProperty ? { uniqueIdProperty } : true;
11159
11454
  result.pointType = "text";
@@ -11935,10 +12230,12 @@ function hashBuckets(initialCount) {
11935
12230
  getColumnNameFromGeoColumn,
11936
12231
  getDataFilterExtensionProps,
11937
12232
  getDefaultAggregationExpColumnAliasForLayerType,
12233
+ getFillPatternAccessor,
11938
12234
  getFilter,
11939
12235
  getIconUrlAccessor,
11940
12236
  getLayerDescriptor,
11941
12237
  getLayerProps,
12238
+ getLineStyleAccessor,
11942
12239
  getMaxMarkerSize,
11943
12240
  getSizeAccessor,
11944
12241
  getSorter,