@carto/api-client 0.5.31 → 0.5.32-alpha.02a4470.133

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 (57) hide show
  1. package/CHANGELOG.md +3 -0
  2. package/build/api-client.cjs +527 -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 +520 -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 +133 -10
  11. package/src/fetch-map/pattern-atlas.ts +461 -0
  12. package/src/fetch-map/patterns/checker-large.png +0 -0
  13. package/src/fetch-map/patterns/checker-large.svg +1 -0
  14. package/src/fetch-map/patterns/checker-medium.png +0 -0
  15. package/src/fetch-map/patterns/checker-medium.svg +1 -0
  16. package/src/fetch-map/patterns/checker-small.png +0 -0
  17. package/src/fetch-map/patterns/checker-small.svg +1 -0
  18. package/src/fetch-map/patterns/cross-hatch-large.png +0 -0
  19. package/src/fetch-map/patterns/cross-hatch-large.svg +1 -0
  20. package/src/fetch-map/patterns/cross-hatch-medium.png +0 -0
  21. package/src/fetch-map/patterns/cross-hatch-medium.svg +1 -0
  22. package/src/fetch-map/patterns/cross-hatch-small.png +0 -0
  23. package/src/fetch-map/patterns/cross-hatch-small.svg +1 -0
  24. package/src/fetch-map/patterns/diag-left-large.png +0 -0
  25. package/src/fetch-map/patterns/diag-left-large.svg +1 -0
  26. package/src/fetch-map/patterns/diag-left-medium.png +0 -0
  27. package/src/fetch-map/patterns/diag-left-medium.svg +1 -0
  28. package/src/fetch-map/patterns/diag-left-small.png +0 -0
  29. package/src/fetch-map/patterns/diag-left-small.svg +1 -0
  30. package/src/fetch-map/patterns/diag-right-large.png +0 -0
  31. package/src/fetch-map/patterns/diag-right-large.svg +1 -0
  32. package/src/fetch-map/patterns/diag-right-medium.png +0 -0
  33. package/src/fetch-map/patterns/diag-right-medium.svg +1 -0
  34. package/src/fetch-map/patterns/diag-right-small.png +0 -0
  35. package/src/fetch-map/patterns/diag-right-small.svg +1 -0
  36. package/src/fetch-map/patterns/dots-large.png +0 -0
  37. package/src/fetch-map/patterns/dots-large.svg +1 -0
  38. package/src/fetch-map/patterns/dots-medium.png +0 -0
  39. package/src/fetch-map/patterns/dots-medium.svg +1 -0
  40. package/src/fetch-map/patterns/dots-small.png +0 -0
  41. package/src/fetch-map/patterns/dots-small.svg +1 -0
  42. package/src/fetch-map/patterns/hlines-large.png +0 -0
  43. package/src/fetch-map/patterns/hlines-large.svg +1 -0
  44. package/src/fetch-map/patterns/hlines-medium.png +0 -0
  45. package/src/fetch-map/patterns/hlines-medium.svg +1 -0
  46. package/src/fetch-map/patterns/hlines-small.png +0 -0
  47. package/src/fetch-map/patterns/hlines-small.svg +1 -0
  48. package/src/fetch-map/patterns/solid.png +0 -0
  49. package/src/fetch-map/patterns/solid.svg +1 -0
  50. package/src/fetch-map/patterns/vlines-large.png +0 -0
  51. package/src/fetch-map/patterns/vlines-large.svg +1 -0
  52. package/src/fetch-map/patterns/vlines-medium.png +0 -0
  53. package/src/fetch-map/patterns/vlines-medium.svg +1 -0
  54. package/src/fetch-map/patterns/vlines-small.png +0 -0
  55. package/src/fetch-map/patterns/vlines-small.svg +1 -0
  56. package/src/fetch-map/types.ts +44 -0
  57. 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 (runtime-assembled 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,418 @@ 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/patterns/hlines-large.png
10679
+ var hlines_large_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAABBSURBVHic7dixAQAgDMOwwP8/wxfNUOkCz04AYK2T5LUjmm47AAAAAOb5Ae0AAAAAmOcHtAMAAABgnh/QDgAAaj69GwQJx6ek3QAAAABJRU5ErkJggg==";
10680
+
10681
+ // src/fetch-map/patterns/hlines-medium.png
10682
+ var hlines_medium_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAABOSURBVHic7daxAQAgDMOwwv8/wxkeKl3gLTkz8wYAVjrbZ/DWAQDQ8QPqAADo+AF1AAB0/IA6AAA6fkAdAAAdP6AOAICOH1AHAEBn/Q/4F6kJD4qx2asAAAAASUVORK5CYII=";
10683
+
10684
+ // src/fetch-map/patterns/hlines-small.png
10685
+ var hlines_small_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAABrSURBVHic7dSxAQAgDMOwwv8/wxkeKl3gJTkz8wbWOtsncOsAaPmAOgBaPqAOgJYPqAOg5QPqAGj5gDoAWj6gDoCWD6gDoOUD6gBo+YA6AFo+oA6Alg+oA6DlA+oAaPmAOgBaPqAOgNb6D/gRbhEfmYiEGgAAAABJRU5ErkJggg==";
10686
+
10687
+ // src/fetch-map/patterns/vlines-large.png
10688
+ var vlines_large_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAACkSURBVHic7dAxCsAwEMRAk///2W5Sp7CLMUGCK28RGuOb+d4u1/8/B+O/oABaQFMALaApgBbQFEALaAqgBTQF0AKaAmgBTQG0gKYAWkBTAC2gKYAW0BRAC2gKoAU0BdACmgJoAU0BtICmAFpAUwAtoCmAFtAUQAtoCqAFNAXQApoCaAFNAbSApgBaQFMALaApgBbQFEALaAqgBTQF0AKaAmgBzQIgxAh3o/Zl8AAAAABJRU5ErkJggg==";
10689
+
10690
+ // src/fetch-map/patterns/vlines-medium.png
10691
+ var vlines_medium_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAACfSURBVHic7dCxDYBQAITQi/vv/J1A25cotDSEbTt75nzdXy/yFzRAB2gaoAM0DdABmgboAE0DdICmATpA0wAdoGmADtA0QAdoGqADNA3QAZoG6ABNA3SApgE6QNMAHaBpgA7QNEAHaBqgAzQN0AGaBugATQN0gKYBOkDTAB2gaYAO0DRAB2gaoAM0DdABmgboAE0DdICmATpA0wAdoLkBMJgQb6A8qDAAAAAASUVORK5CYII=";
10692
+
10693
+ // src/fetch-map/patterns/vlines-small.png
10694
+ var vlines_small_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAACcSURBVHic7dCxDcAwAMMwo///nIw9gUPEzZuhbTv7ndf2t8cVQB/QCqAPaAXQB7QC6ANaAfQBrQD6gFYAfUArgD6gFUAf0AqgD2gF0Ae0AugDWgH0Aa0A+oBWAH1AK4A+oBVAH9AKoA9oBdAHtALoA1oB9AGtAPqAVgB9QCuAPqAVQB/QCqAPaAXQB7QC6ANaAfQBrQD6gFYAfUC7UEAgXxU1dpkAAAAASUVORK5CYII=";
10695
+
10696
+ // src/fetch-map/patterns/diag-left-large.png
10697
+ var diag_left_large_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAACtSURBVHic7dkxCsMwEETRuf/lfKSkmBCiflUseR/cDuYhN3KSvD7PVM+FzfxsPsOb3+F/RTiGIUCAACEQzmEIECBACIRzGAIECBAC4RyGAGEpwvQd2zaE8eOwDeHKN7EJIYHQIEBoECA0CBAaBAgNAoQGAUKDAKFBgNAgbEWYltiGcOU4bEJY9QfmBkICoUGA0CBAaBAgNAgQGgQIDQKEBgFCgwChrUWYfOF1CG/KcyXf7pwUyQAAAABJRU5ErkJggg==";
10698
+
10699
+ // src/fetch-map/patterns/diag-left-medium.png
10700
+ 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==";
10701
+
10702
+ // src/fetch-map/patterns/diag-left-small.png
10703
+ var diag_left_small_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAADqSURBVHic7dgxCsMwAARB/f9zflLS2JDC/U7gDG4EA4s63TnnfO7/+a6Xs/Nzdr2c/bMnIkpPRNSeiMg8ERF6IqL0RETpiYjaExG1JyIST0SEnogoPRFReiKi9kRE5omI0BMRpSciSk9E1J6IyDwREXoiYnvAXoG7hNwTEYknIkJPRJSeiCg9EVF7ImJ7wPaAxhMRpSciak9EZJ6ICD0RsT1gr8BdQu6JiMQTEaEnIkpPRJSeiKg9EbE9YHtA44mI0hMRtSciMk9EhJ6I2B6wV+AuIfdEROKJiNATEaUnIkpPRNSeiNgeUPgvaSqXeT0fItoAAAAASUVORK5CYII=";
10704
+
10705
+ // src/fetch-map/patterns/diag-right-large.png
10706
+ 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=";
10707
+
10708
+ // src/fetch-map/patterns/diag-right-medium.png
10709
+ 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";
10710
+
10711
+ // src/fetch-map/patterns/diag-right-small.png
10712
+ var diag_right_small_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAADbSURBVHic7dgxCsNAEMXQuf/lfCSnCdiFqx01AqXLwgP90jMzc8/zu/7/32/zers+3uxeHY95dXzjd14dT3h1POHV8ahXxze+8cdeHU94dTzh1fGYV8c3fufV8YRXxxNeHY95dXzjd14d3z0A8Op41KvjG9/47gGnXh1PeHV8n8SN33t1POHV8YRXx2NeHd/4nVfHdw8AvDoe9er4xje+e8CpV8cTXh3fJ3Hj914dT3h1POHV8ZhXxzd+59Xx3QMAr45HvTq+8Y3vHnDq1fGEV8f3Sdz4vVfHr/0PaSqXeV716iAAAAAASUVORK5CYII=";
10713
+
10714
+ // src/fetch-map/patterns/cross-hatch-large.png
10715
+ 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=";
10716
+
10717
+ // src/fetch-map/patterns/cross-hatch-medium.png
10718
+ 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";
10719
+
10720
+ // src/fetch-map/patterns/cross-hatch-small.png
10721
+ 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";
10722
+
10723
+ // src/fetch-map/patterns/dots-large.png
10724
+ var dots_large_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAABJSURBVHic7dixEQAgDAMxH/vvDDskBReQ+h/ATpKduv1ADwAAwJduz9Gr/WrEAAAAMNjoPe8PAAAAgJLRe94fAAAAACWj93y3PwvzJ98DYTY6AAAAAElFTkSuQmCC";
10725
+
10726
+ // src/fetch-map/patterns/dots-medium.png
10727
+ var dots_medium_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAABdSURBVHic7daxDcBADAMxI/vv/Jkg6YQXYLLVAKeZmTPfzoIdgNVuZ+jq/vyMALBAdaf9AACIqu60HwAAUdWd9gMAIKq6034AAERVd9oPAICo6k77AQAQVd3p9P4CKgaPf9S3g48AAAAASUVORK5CYII=";
10728
+
10729
+ // src/fetch-map/patterns/dots-small.png
10730
+ var dots_small_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAAB8SURBVHic7dSxDQAxDAMx4/ffOSl/A0WAyc69TzMzZ35n4c16r1/w6f0NrFfVpA2AuKombQDEVTVpAyCuqkkbAHFVTdoAiKtq0gZAXFWTNgDiqpq0ARBX1aQNgLiqJm0AxFU1aQMgrqpJGwBxVU3aAIiratIGQFxVk+n7ApyMHh3vKZDHAAAAAElFTkSuQmCC";
10731
+
10732
+ // src/fetch-map/patterns/checker-large.png
10733
+ var checker_large_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAAC7SURBVHic7dhRCsJQEMXQV/e/57oD56scHZPfciGEFnGuc859PnMNz396/xrG6ymAFtBM39fR3+jT+79/AwqgBTQF0AKaAmgBzfXtv9P9F3iYAmgBTQG0gKYAWkDTPWAYr6cAWkBTAC2gKYAW0HQPGMbrKYAW0BRAC2gKoAU03QOG8XoKoAU0BdACmgJoAU33gGG8ngJoAU0BtICmAFpA0z1gGK+nAFpAUwAtoCmAFtB0DxjG6ymAFtC8AfltJHRjA+VQAAAAAElFTkSuQmCC";
10734
+
10735
+ // src/fetch-map/patterns/checker-medium.png
10736
+ var checker_medium_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAACpSURBVHic7dYxDoNAAAPBvfz/z6EOD2AjvNOhayzDCR/gy69ze371+Ydx97aw38jT5/NfQAXYAWzn3+5kf4GHVYAdwNYOYFwF2AFs7QDGVYAdwNYOYFwF2AFs7QDGVYAdwNYOYFwF2AFs7QDGVYAdwNYOYFwF2AFs7QDGVYAdwNYOYFwF2AFs7QDGVYAdwNYOYFwF2AFs7QDGVYAdwNYOYFwF2AFs7QDGXajSiGiQ1/fcAAAAAElFTkSuQmCC";
10737
+
10738
+ // src/fetch-map/patterns/checker-small.png
10739
+ var checker_small_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAACgSURBVHic7dRBCoNQFEPR1P3vuZ1UEBcQAv8ccPB0am6SfP/P7aj78/rwfHfEfYWtX7J9H/8HaEDY2qQGlGlA2NqkBpRpQNjapAaUaUDY2qQGlGlA2NqkBpRpQNjapAaUaUDY2qQGlGlA2NqkBpRpQNjapAaUaUDY2qQGlGlA2NqkBpRpQNjapAaUaUDY2qQGlGlA2NqkBpRpQNjaZPv+AQpgHkxA3R9BAAAAAElFTkSuQmCC";
10740
+
10741
+ // src/fetch-map/patterns/solid.png
10742
+ var solid_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7OHOkAAACWSURBVHic7dBBEcAwAMOwrPw5dzD0qIXA52/b3cOODtAaoAO0BugArQE6QGuADtAaoAO0BugArQE6QGuADtAaoAO0BugArQE6QGuADtAaoAO0BugArQE6QGuADtAaoAO0BugArQE6QGuADtAaoAO0BugArQE6QGuADtAaoAO0BugArQE6QGuADtAaoAO0BugArQE6QPsBULQBfwAqZPkAAAAASUVORK5CYII=";
10743
+
10744
+ // src/fetch-map/patterns/hlines-large.svg
10745
+ var hlines_large_default2 = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><defs><pattern id="p" width="64" height="16" patternUnits="userSpaceOnUse"><rect width="64" height="2"/></pattern></defs><rect width="64" height="64" fill="url(%23p)"/></svg>%0A';
10746
+
10747
+ // src/fetch-map/patterns/hlines-medium.svg
10748
+ var hlines_medium_default2 = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><defs><pattern id="p" width="64" height="8" patternUnits="userSpaceOnUse"><rect width="64" height="2"/></pattern></defs><rect width="64" height="64" fill="url(%23p)"/></svg>%0A';
10749
+
10750
+ // src/fetch-map/patterns/hlines-small.svg
10751
+ var hlines_small_default2 = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><defs><pattern id="p" width="64" height="4" patternUnits="userSpaceOnUse"><rect width="64" height="2"/></pattern></defs><rect width="64" height="64" fill="url(%23p)"/></svg>%0A';
10752
+
10753
+ // src/fetch-map/patterns/vlines-large.svg
10754
+ var vlines_large_default2 = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><defs><pattern id="p" width="16" height="64" patternUnits="userSpaceOnUse"><rect width="2" height="64"/></pattern></defs><rect width="64" height="64" fill="url(%23p)"/></svg>%0A';
10755
+
10756
+ // src/fetch-map/patterns/vlines-medium.svg
10757
+ var vlines_medium_default2 = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><defs><pattern id="p" width="8" height="64" patternUnits="userSpaceOnUse"><rect width="2" height="64"/></pattern></defs><rect width="64" height="64" fill="url(%23p)"/></svg>%0A';
10758
+
10759
+ // src/fetch-map/patterns/vlines-small.svg
10760
+ var vlines_small_default2 = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><defs><pattern id="p" width="4" height="64" patternUnits="userSpaceOnUse"><rect width="2" height="64"/></pattern></defs><rect width="64" height="64" fill="url(%23p)"/></svg>%0A';
10761
+
10762
+ // src/fetch-map/patterns/diag-left-large.svg
10763
+ var diag_left_large_default2 = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><defs><pattern id="p" width="45.2548" height="64" patternUnits="userSpaceOnUse" patternTransform="rotate(-45)"><rect width="1.4142" height="64"/></pattern></defs><rect width="64" height="64" fill="url(%23p)"/></svg>%0A';
10764
+
10765
+ // src/fetch-map/patterns/diag-left-medium.svg
10766
+ var diag_left_medium_default2 = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><defs><pattern id="p" width="22.6274" height="64" patternUnits="userSpaceOnUse" patternTransform="rotate(-45)"><rect width="1.4142" height="64"/></pattern></defs><rect width="64" height="64" fill="url(%23p)"/></svg>%0A';
10767
+
10768
+ // src/fetch-map/patterns/diag-left-small.svg
10769
+ var diag_left_small_default2 = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><defs><pattern id="p" width="11.3137" height="64" patternUnits="userSpaceOnUse" patternTransform="rotate(-45)"><rect width="1.4142" height="64"/></pattern></defs><rect width="64" height="64" fill="url(%23p)"/></svg>%0A';
10770
+
10771
+ // src/fetch-map/patterns/diag-right-large.svg
10772
+ var diag_right_large_default2 = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><defs><pattern id="p" width="45.2548" height="64" patternUnits="userSpaceOnUse" patternTransform="rotate(45)"><rect width="1.4142" height="64"/></pattern></defs><rect width="64" height="64" fill="url(%23p)"/></svg>%0A';
10773
+
10774
+ // src/fetch-map/patterns/diag-right-medium.svg
10775
+ var diag_right_medium_default2 = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><defs><pattern id="p" width="22.6274" height="64" patternUnits="userSpaceOnUse" patternTransform="rotate(45)"><rect width="1.4142" height="64"/></pattern></defs><rect width="64" height="64" fill="url(%23p)"/></svg>%0A';
10776
+
10777
+ // src/fetch-map/patterns/diag-right-small.svg
10778
+ var diag_right_small_default2 = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><defs><pattern id="p" width="11.3137" height="64" patternUnits="userSpaceOnUse" patternTransform="rotate(45)"><rect width="1.4142" height="64"/></pattern></defs><rect width="64" height="64" fill="url(%23p)"/></svg>%0A';
10779
+
10780
+ // src/fetch-map/patterns/cross-hatch-large.svg
10781
+ var cross_hatch_large_default2 = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><defs><pattern id="a" width="45.2548" height="64" patternUnits="userSpaceOnUse" patternTransform="rotate(-45)"><rect width="1.4142" height="64"/></pattern><pattern id="b" width="45.2548" height="64" patternUnits="userSpaceOnUse" patternTransform="rotate(45)"><rect width="1.4142" height="64"/></pattern></defs><rect width="64" height="64" fill="url(%23a)"/><rect width="64" height="64" fill="url(%23b)"/></svg>%0A';
10782
+
10783
+ // src/fetch-map/patterns/cross-hatch-medium.svg
10784
+ var cross_hatch_medium_default2 = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><defs><pattern id="a" width="22.6274" height="64" patternUnits="userSpaceOnUse" patternTransform="rotate(-45)"><rect width="1.4142" height="64"/></pattern><pattern id="b" width="22.6274" height="64" patternUnits="userSpaceOnUse" patternTransform="rotate(45)"><rect width="1.4142" height="64"/></pattern></defs><rect width="64" height="64" fill="url(%23a)"/><rect width="64" height="64" fill="url(%23b)"/></svg>%0A';
10785
+
10786
+ // src/fetch-map/patterns/cross-hatch-small.svg
10787
+ var cross_hatch_small_default2 = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><defs><pattern id="a" width="11.3137" height="64" patternUnits="userSpaceOnUse" patternTransform="rotate(-45)"><rect width="1.4142" height="64"/></pattern><pattern id="b" width="11.3137" height="64" patternUnits="userSpaceOnUse" patternTransform="rotate(45)"><rect width="1.4142" height="64"/></pattern></defs><rect width="64" height="64" fill="url(%23a)"/><rect width="64" height="64" fill="url(%23b)"/></svg>%0A';
10788
+
10789
+ // src/fetch-map/patterns/dots-large.svg
10790
+ var dots_large_default2 = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><defs><pattern id="p" width="16" height="16" patternUnits="userSpaceOnUse"><rect width="2" height="2"/></pattern></defs><rect width="64" height="64" fill="url(%23p)"/></svg>%0A';
10791
+
10792
+ // src/fetch-map/patterns/dots-medium.svg
10793
+ var dots_medium_default2 = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><defs><pattern id="p" width="8" height="8" patternUnits="userSpaceOnUse"><rect width="2" height="2"/></pattern></defs><rect width="64" height="64" fill="url(%23p)"/></svg>%0A';
10794
+
10795
+ // src/fetch-map/patterns/dots-small.svg
10796
+ var dots_small_default2 = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><defs><pattern id="p" width="4" height="4" patternUnits="userSpaceOnUse"><rect width="2" height="2"/></pattern></defs><rect width="64" height="64" fill="url(%23p)"/></svg>%0A';
10797
+
10798
+ // src/fetch-map/patterns/checker-large.svg
10799
+ var checker_large_default2 = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><defs><pattern id="p" width="16" height="16" patternUnits="userSpaceOnUse"><rect width="8" height="8"/><rect x="8" y="8" width="8" height="8"/></pattern></defs><rect width="64" height="64" fill="url(%23p)"/></svg>%0A';
10800
+
10801
+ // src/fetch-map/patterns/checker-medium.svg
10802
+ var checker_medium_default2 = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><defs><pattern id="p" width="8" height="8" patternUnits="userSpaceOnUse"><rect width="4" height="4"/><rect x="4" y="4" width="4" height="4"/></pattern></defs><rect width="64" height="64" fill="url(%23p)"/></svg>%0A';
10803
+
10804
+ // src/fetch-map/patterns/checker-small.svg
10805
+ var checker_small_default2 = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><defs><pattern id="p" width="4" height="4" patternUnits="userSpaceOnUse"><rect width="2" height="2"/><rect x="2" y="2" width="2" height="2"/></pattern></defs><rect width="64" height="64" fill="url(%23p)"/></svg>%0A';
10806
+
10807
+ // src/fetch-map/patterns/solid.svg
10808
+ var solid_default2 = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><defs></defs><rect width="64" height="64"/></svg>%0A';
10809
+
10810
+ // src/fetch-map/pattern-atlas.ts
10811
+ var DEFAULT_CELL_SIZE = 128;
10812
+ var SOURCE_TILE_SIZE = 64;
10813
+ var VECTOR_RENDER_SIZE = 128;
10814
+ var PATTERN_ROWS = [
10815
+ "hlines",
10816
+ "vlines",
10817
+ "diag-left",
10818
+ "diag-right",
10819
+ "cross-hatch",
10820
+ "dots",
10821
+ "checker"
10822
+ ];
10823
+ var DENSITY_COLUMNS = ["large", "medium", "small"];
10824
+ var CELL_URLS = {
10825
+ "hlines-large": hlines_large_default,
10826
+ "hlines-medium": hlines_medium_default,
10827
+ "hlines-small": hlines_small_default,
10828
+ "vlines-large": vlines_large_default,
10829
+ "vlines-medium": vlines_medium_default,
10830
+ "vlines-small": vlines_small_default,
10831
+ "diag-left-large": diag_left_large_default,
10832
+ "diag-left-medium": diag_left_medium_default,
10833
+ "diag-left-small": diag_left_small_default,
10834
+ "diag-right-large": diag_right_large_default,
10835
+ "diag-right-medium": diag_right_medium_default,
10836
+ "diag-right-small": diag_right_small_default,
10837
+ "cross-hatch-large": cross_hatch_large_default,
10838
+ "cross-hatch-medium": cross_hatch_medium_default,
10839
+ "cross-hatch-small": cross_hatch_small_default,
10840
+ "dots-large": dots_large_default,
10841
+ "dots-medium": dots_medium_default,
10842
+ "dots-small": dots_small_default,
10843
+ "checker-large": checker_large_default,
10844
+ "checker-medium": checker_medium_default,
10845
+ "checker-small": checker_small_default,
10846
+ solid: solid_default
10847
+ };
10848
+ var CELL_SVG_URLS = {
10849
+ "hlines-large": hlines_large_default2,
10850
+ "hlines-medium": hlines_medium_default2,
10851
+ "hlines-small": hlines_small_default2,
10852
+ "vlines-large": vlines_large_default2,
10853
+ "vlines-medium": vlines_medium_default2,
10854
+ "vlines-small": vlines_small_default2,
10855
+ "diag-left-large": diag_left_large_default2,
10856
+ "diag-left-medium": diag_left_medium_default2,
10857
+ "diag-left-small": diag_left_small_default2,
10858
+ "diag-right-large": diag_right_large_default2,
10859
+ "diag-right-medium": diag_right_medium_default2,
10860
+ "diag-right-small": diag_right_small_default2,
10861
+ "cross-hatch-large": cross_hatch_large_default2,
10862
+ "cross-hatch-medium": cross_hatch_medium_default2,
10863
+ "cross-hatch-small": cross_hatch_small_default2,
10864
+ "dots-large": dots_large_default2,
10865
+ "dots-medium": dots_medium_default2,
10866
+ "dots-small": dots_small_default2,
10867
+ "checker-large": checker_large_default2,
10868
+ "checker-medium": checker_medium_default2,
10869
+ "checker-small": checker_small_default2,
10870
+ solid: solid_default2
10871
+ };
10872
+ function debugGlobals() {
10873
+ return globalThis;
10874
+ }
10875
+ function getPatternCellSize() {
10876
+ const cell = debugGlobals().__CARTO_PATTERN_CELL_SIZE__;
10877
+ return typeof cell === "number" && cell > 0 ? cell : DEFAULT_CELL_SIZE;
10878
+ }
10879
+ function getPatternAssetSource() {
10880
+ const source = debugGlobals().__CARTO_PATTERN_ASSET_SOURCE__;
10881
+ return source === "svg" || source === "procedural" ? source : "png";
10882
+ }
10883
+ function getPatternTextureParameters() {
10884
+ const params = debugGlobals().__CARTO_PATTERN_TEXTURE_PARAMS__;
10885
+ return params && typeof params === "object" ? params : void 0;
10886
+ }
10887
+ function getPatternRepeats(cell, source = getPatternAssetSource()) {
10888
+ const repeatSize = source === "png" ? SOURCE_TILE_SIZE : VECTOR_RENDER_SIZE;
10889
+ return Math.max(1, Math.floor(cell / repeatSize));
10890
+ }
10891
+ function getPatternScaleAdjustment(cell = getPatternCellSize()) {
10892
+ return SOURCE_TILE_SIZE * getPatternRepeats(cell) / cell;
10893
+ }
10894
+ function getPatternCellPadding(cell) {
10895
+ return Math.max(2, Math.round(cell / 16));
10896
+ }
10897
+ function getPatternAtlasMapping(cell = getPatternCellSize()) {
10898
+ const pad = getPatternCellPadding(cell);
10899
+ const pitch = cell + 2 * pad;
10900
+ const mapping = {};
10901
+ const frame = (col, row) => ({
10902
+ x: pad + col * pitch,
10903
+ y: pad + row * pitch,
10904
+ width: cell,
10905
+ height: cell,
10906
+ mask: true
10907
+ });
10908
+ PATTERN_ROWS.forEach((pattern, row) => {
10909
+ DENSITY_COLUMNS.forEach((density, col) => {
10910
+ mapping[`${pattern}-${density}`] = frame(col, row);
10911
+ });
10912
+ });
10913
+ mapping.none = frame(0, PATTERN_ROWS.length);
10914
+ mapping.solid = frame(1, PATTERN_ROWS.length);
10915
+ return mapping;
10916
+ }
10917
+ function createCanvas(w, h) {
10918
+ if (typeof OffscreenCanvas !== "undefined") return new OffscreenCanvas(w, h);
10919
+ if (typeof document !== "undefined") {
10920
+ const c = document.createElement("canvas");
10921
+ c.width = w;
10922
+ c.height = h;
10923
+ return c;
10924
+ }
10925
+ throw new Error(
10926
+ "carto-api-client: no Canvas available to assemble the pattern atlas"
10927
+ );
10928
+ }
10929
+ async function loadImage(dataUrl) {
10930
+ if (typeof createImageBitmap !== "undefined" && typeof fetch !== "undefined") {
10931
+ const blob = await (await fetch(dataUrl)).blob();
10932
+ return createImageBitmap(blob);
10933
+ }
10934
+ return new Promise((resolve, reject) => {
10935
+ const img = new Image();
10936
+ img.onload = () => resolve(img);
10937
+ img.onerror = reject;
10938
+ img.src = dataUrl;
10939
+ });
10940
+ }
10941
+ function loadSvgImage(dataUrl) {
10942
+ return new Promise((resolve, reject) => {
10943
+ const img = new Image();
10944
+ img.onload = () => resolve(img);
10945
+ img.onerror = reject;
10946
+ img.src = dataUrl;
10947
+ });
10948
+ }
10949
+ var DENSITY_STEP = { small: 1, medium: 2, large: 4 };
10950
+ function paintDesignTile(ctx, key) {
10951
+ const [, name, density] = key.match(/^(.*?)(?:-(small|medium|large))?$/) ?? [];
10952
+ const step = DENSITY_STEP[density ?? ""] ?? 1;
10953
+ const linePeriod = 4 * step;
10954
+ const diagPeriod = 16 * step;
10955
+ const square = 2 * step;
10956
+ ctx.fillStyle = "#000";
10957
+ ctx.strokeStyle = "#000";
10958
+ const diag = (dir) => {
10959
+ ctx.lineWidth = Math.SQRT2;
10960
+ ctx.beginPath();
10961
+ for (let k = -Math.ceil(64 / diagPeriod); k <= 2 * Math.ceil(64 / diagPeriod); k++) {
10962
+ ctx.moveTo(k * diagPeriod - 8 * dir, -8);
10963
+ ctx.lineTo(k * diagPeriod + 72 * dir, 72);
10964
+ }
10965
+ ctx.stroke();
10966
+ };
10967
+ switch (name) {
10968
+ case "solid":
10969
+ ctx.fillRect(0, 0, 64, 64);
10970
+ break;
10971
+ case "hlines":
10972
+ for (let y = 0; y < 64; y += linePeriod) ctx.fillRect(0, y, 64, 2);
10973
+ break;
10974
+ case "vlines":
10975
+ for (let x = 0; x < 64; x += linePeriod) ctx.fillRect(x, 0, 2, 64);
10976
+ break;
10977
+ case "dots":
10978
+ for (let y = 0; y < 64; y += linePeriod)
10979
+ for (let x = 0; x < 64; x += linePeriod) ctx.fillRect(x, y, 2, 2);
10980
+ break;
10981
+ case "checker":
10982
+ for (let j = 0; j * square < 64; j++)
10983
+ for (let i = 0; i * square < 64; i++)
10984
+ if ((i + j) % 2 === 0)
10985
+ ctx.fillRect(i * square, j * square, square, square);
10986
+ break;
10987
+ case "diag-left":
10988
+ diag(1);
10989
+ break;
10990
+ case "diag-right":
10991
+ diag(-1);
10992
+ break;
10993
+ case "cross-hatch":
10994
+ diag(1);
10995
+ diag(-1);
10996
+ break;
10997
+ }
10998
+ }
10999
+ function paintTileCanvas(key, size) {
11000
+ const canvas = createCanvas(size, size);
11001
+ const ctx = canvas.getContext("2d");
11002
+ if (!ctx)
11003
+ throw new Error(
11004
+ "carto-api-client: 2D context unavailable for pattern tile"
11005
+ );
11006
+ ctx.scale(size / 64, size / 64);
11007
+ paintDesignTile(ctx, key);
11008
+ return canvas;
11009
+ }
11010
+ async function composeAtlas(cell, reps, images) {
11011
+ const mapping = getPatternAtlasMapping(cell);
11012
+ const pad = getPatternCellPadding(cell);
11013
+ const pitch = cell + 2 * pad;
11014
+ const step = cell / reps;
11015
+ const canvas = createCanvas(pitch * 3, pitch * (PATTERN_ROWS.length + 1));
11016
+ const ctx = canvas.getContext("2d");
11017
+ if (!ctx)
11018
+ throw new Error(
11019
+ "carto-api-client: 2D context unavailable for pattern atlas"
11020
+ );
11021
+ for (const [key, frame] of Object.entries(mapping)) {
11022
+ const img = images[key];
11023
+ if (!img) continue;
11024
+ ctx.save();
11025
+ ctx.beginPath();
11026
+ ctx.rect(frame.x - pad, frame.y - pad, cell + 2 * pad, cell + 2 * pad);
11027
+ ctx.clip();
11028
+ for (let i = -1; i <= reps; i++) {
11029
+ for (let j = -1; j <= reps; j++) {
11030
+ ctx.drawImage(img, frame.x + i * step, frame.y + j * step, step, step);
11031
+ }
11032
+ }
11033
+ ctx.restore();
11034
+ }
11035
+ if (typeof createImageBitmap !== "undefined")
11036
+ return createImageBitmap(canvas);
11037
+ return canvas;
11038
+ }
11039
+ async function buildPngAtlas(cell) {
11040
+ const images = {};
11041
+ await Promise.all(
11042
+ Object.entries(CELL_URLS).map(async ([key, url]) => {
11043
+ images[key] = await loadImage(url);
11044
+ })
11045
+ );
11046
+ return composeAtlas(cell, getPatternRepeats(cell, "png"), images);
11047
+ }
11048
+ async function buildSvgAtlas(cell) {
11049
+ const images = {};
11050
+ await Promise.all(
11051
+ Object.entries(CELL_SVG_URLS).map(async ([key, url]) => {
11052
+ images[key] = await loadSvgImage(url);
11053
+ })
11054
+ );
11055
+ return composeAtlas(cell, getPatternRepeats(cell, "svg"), images);
11056
+ }
11057
+ async function buildProceduralAtlas(cell) {
11058
+ const reps = getPatternRepeats(cell, "procedural");
11059
+ const step = cell / reps;
11060
+ const images = {};
11061
+ for (const key of Object.keys(CELL_URLS)) {
11062
+ images[key] = paintTileCanvas(key, step);
11063
+ }
11064
+ return composeAtlas(cell, reps, images);
11065
+ }
11066
+ var ATLAS_BUILDERS = {
11067
+ png: buildPngAtlas,
11068
+ svg: buildSvgAtlas,
11069
+ procedural: buildProceduralAtlas
11070
+ };
11071
+ var atlasPromises = /* @__PURE__ */ new Map();
11072
+ function getPatternAtlas(cell = getPatternCellSize()) {
11073
+ const source = getPatternAssetSource();
11074
+ const memoKey = `${source}:${cell}`;
11075
+ let promise = atlasPromises.get(memoKey);
11076
+ if (!promise) {
11077
+ promise = ATLAS_BUILDERS[source](cell);
11078
+ promise.catch(() => {
11079
+ });
11080
+ atlasPromises.set(memoKey, promise);
11081
+ }
11082
+ return promise;
11083
+ }
11084
+
11085
+ // src/fetch-map/parse-map.ts
10644
11086
  function getLayerDescriptor({
10645
11087
  mapConfig,
10646
11088
  layer,
@@ -10863,6 +11305,10 @@ function createChannelProps(id, layerType, config2, visualChannels, data, datase
10863
11305
  const result = {};
10864
11306
  const updateTriggers = {};
10865
11307
  const scales = {};
11308
+ const isVectorTile = layerType === "mvt" || layerType === "tileset";
11309
+ const geometry = data.tilestats?.layers?.[0]?.geometry;
11310
+ const isLine = geometry === "Line" || geometry === "LineString" || geometry === "MultiLineString";
11311
+ const isPolygon = geometry === "Polygon" || geometry === "MultiPolygon";
10866
11312
  {
10867
11313
  const { colorField, colorScale } = visualChannels;
10868
11314
  const { colorRange } = visConfig;
@@ -11023,6 +11469,84 @@ function createChannelProps(id, layerType, config2, visualChannels, data, datase
11023
11469
  };
11024
11470
  }
11025
11471
  }
11472
+ {
11473
+ const strokeVisible = isLine || isPolygon && Boolean(visConfig.stroked);
11474
+ if (isVectorTile && strokeVisible) {
11475
+ const { lineStyleField, lineStyleScale } = visualChannels;
11476
+ const { lineStyleRange } = visConfig;
11477
+ if (visConfig.lineStyle && visConfig.lineStyle !== "solid") {
11478
+ if (visConfig.lineStyle === "dotted") {
11479
+ result.lineCapRounded = true;
11480
+ }
11481
+ result.lineStyle = visConfig.lineStyle;
11482
+ if (visConfig.dashArray) {
11483
+ result.dashArray = visConfig.dashArray;
11484
+ result.getDashArray = visConfig.dashArray;
11485
+ }
11486
+ }
11487
+ if (lineStyleField && lineStyleScale && lineStyleRange) {
11488
+ const { accessor, ...scaleProps } = getLineStyleAccessor(
11489
+ lineStyleField,
11490
+ lineStyleRange,
11491
+ data
11492
+ );
11493
+ result.getDashArray = accessor;
11494
+ scales.lineStyle = updateTriggers.getDashArray = {
11495
+ field: lineStyleField,
11496
+ type: lineStyleScale,
11497
+ ...scaleProps
11498
+ };
11499
+ const dashArrays = [
11500
+ ...lineStyleRange.dashArrayMap.map(({ dashArray }) => dashArray),
11501
+ ...lineStyleRange.othersDashArray ? [lineStyleRange.othersDashArray] : []
11502
+ ];
11503
+ if (dashArrays.some(([dash]) => dash === 0)) {
11504
+ result.lineCapRounded = true;
11505
+ }
11506
+ }
11507
+ }
11508
+ }
11509
+ {
11510
+ const fillPatternEnabled = Boolean(
11511
+ visConfig.filled && visConfig.fillPatternEnabled
11512
+ );
11513
+ result.fillPatternEnabled = fillPatternEnabled;
11514
+ if (visConfig.filled) {
11515
+ result.fillPatternAtlas = getPatternAtlas();
11516
+ result.fillPatternMapping = getPatternAtlasMapping();
11517
+ result.fillPatternMask = true;
11518
+ const textureParameters = getPatternTextureParameters();
11519
+ if (textureParameters) {
11520
+ result.textureParameters = textureParameters;
11521
+ }
11522
+ result.getFillPatternScale = (visConfig.fillPatternSize ?? 1) * getPatternScaleAdjustment();
11523
+ const { fillPatternField, fillPatternScale } = visualChannels;
11524
+ const { fillPatternRange, fillPatternDensity } = visConfig;
11525
+ if (!fillPatternEnabled) {
11526
+ result.getFillPattern = () => "solid";
11527
+ updateTriggers.getFillPattern = "solid";
11528
+ } else if (fillPatternField && fillPatternScale && fillPatternRange) {
11529
+ result.fillPattern = visConfig.fillPattern;
11530
+ const { accessor, ...scaleProps } = getFillPatternAccessor(
11531
+ fillPatternField,
11532
+ fillPatternRange,
11533
+ fillPatternDensity,
11534
+ data
11535
+ );
11536
+ result.getFillPattern = accessor;
11537
+ scales.fillPattern = updateTriggers.getFillPattern = {
11538
+ field: fillPatternField,
11539
+ type: fillPatternScale,
11540
+ ...scaleProps
11541
+ };
11542
+ } else {
11543
+ result.fillPattern = visConfig.fillPattern;
11544
+ const key = `${visConfig.fillPattern}-${fillPatternDensity ?? "medium"}`;
11545
+ result.getFillPattern = () => key;
11546
+ updateTriggers.getFillPattern = key;
11547
+ }
11548
+ }
11549
+ }
11026
11550
  {
11027
11551
  const { heightField, heightScale } = visualChannels;
11028
11552
  const { enable3d, heightRange } = visConfig;
@@ -11151,9 +11675,7 @@ function createChannelProps(id, layerType, config2, visualChannels, data, datase
11151
11675
  } = secondaryLabel || {};
11152
11676
  result.getText = mainLabel.field && getTextAccessor(mainLabel.field, data);
11153
11677
  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")) {
11678
+ if ((isLine || isPolygon) && isVectorTile) {
11157
11679
  const uniqueIdProperty = visConfig.textLabelUniqueIdField;
11158
11680
  result.autoLabels = uniqueIdProperty ? { uniqueIdProperty } : true;
11159
11681
  result.pointType = "text";
@@ -11935,10 +12457,12 @@ function hashBuckets(initialCount) {
11935
12457
  getColumnNameFromGeoColumn,
11936
12458
  getDataFilterExtensionProps,
11937
12459
  getDefaultAggregationExpColumnAliasForLayerType,
12460
+ getFillPatternAccessor,
11938
12461
  getFilter,
11939
12462
  getIconUrlAccessor,
11940
12463
  getLayerDescriptor,
11941
12464
  getLayerProps,
12465
+ getLineStyleAccessor,
11942
12466
  getMaxMarkerSize,
11943
12467
  getSizeAccessor,
11944
12468
  getSorter,