@deck.gl/extensions 9.4.0-beta.1 → 9.4.0-beta.4

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/dist/dist.dev.js +1281 -120
  2. package/dist/fill-style/fill-style-extension.d.ts +38 -6
  3. package/dist/fill-style/fill-style-extension.d.ts.map +1 -1
  4. package/dist/fill-style/fill-style-extension.js +88 -10
  5. package/dist/fill-style/fill-style-extension.js.map +1 -1
  6. package/dist/fill-style/procedural-pattern.d.ts +65 -0
  7. package/dist/fill-style/procedural-pattern.d.ts.map +1 -0
  8. package/dist/fill-style/procedural-pattern.js +135 -0
  9. package/dist/fill-style/procedural-pattern.js.map +1 -0
  10. package/dist/fill-style/shader-module.d.ts +13 -4
  11. package/dist/fill-style/shader-module.d.ts.map +1 -1
  12. package/dist/fill-style/shader-module.js +212 -21
  13. package/dist/fill-style/shader-module.js.map +1 -1
  14. package/dist/index.cjs +886 -2702
  15. package/dist/index.cjs.map +3 -3
  16. package/dist/index.d.ts +2 -1
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/mask/shader-module.d.ts +1 -0
  19. package/dist/mask/shader-module.d.ts.map +1 -1
  20. package/dist/path-style/path-style-extension.d.ts +49 -6
  21. package/dist/path-style/path-style-extension.d.ts.map +1 -1
  22. package/dist/path-style/path-style-extension.js +237 -37
  23. package/dist/path-style/path-style-extension.js.map +1 -1
  24. package/dist/path-style/shaders.glsl.d.ts +30 -1
  25. package/dist/path-style/shaders.glsl.d.ts.map +1 -1
  26. package/dist/path-style/shaders.glsl.js +136 -21
  27. package/dist/path-style/shaders.glsl.js.map +1 -1
  28. package/dist/terrain/shader-module.d.ts +1 -0
  29. package/dist/terrain/shader-module.d.ts.map +1 -1
  30. package/dist.min.js +377 -98
  31. package/package.json +7 -7
  32. package/src/fill-style/fill-style-extension.ts +135 -13
  33. package/src/fill-style/procedural-pattern.ts +203 -0
  34. package/src/fill-style/shader-module.ts +233 -23
  35. package/src/index.ts +10 -1
  36. package/src/path-style/path-style-extension.ts +350 -44
  37. package/src/path-style/shaders.glsl.ts +268 -27
@@ -1,19 +1,74 @@
1
1
  // deck.gl
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
- import { LayerExtension, _mergeShaders as mergeShaders } from '@deck.gl/core';
5
- import { vec3 } from '@math.gl/core';
4
+ import { LayerExtension, WebMercatorViewport, project, _deepEqual as deepEqual, _mergeShaders as mergeShaders } from '@deck.gl/core';
5
+ import { vec3, vec4 } from '@math.gl/core';
6
6
  import { dashShaders, offsetShaders, scatterplotDashShaders, textBackgroundDashShaders } from "./shaders.glsl.js";
7
7
  const defaultProps = {
8
8
  getDashArray: { type: 'accessor', value: [0, 0] },
9
9
  getOffset: { type: 'accessor', value: 0 },
10
10
  dashJustified: false,
11
- dashGapPickable: false
11
+ dashGapPickable: false,
12
+ dashUnits: 'widths'
12
13
  };
14
+ /** Keep in sync with the branch in the dash vertex shader. */
15
+ const DASH_UNITS = {
16
+ widths: 0,
17
+ pixels: 1,
18
+ meters: 2,
19
+ common: 3
20
+ };
21
+ const PATH_STYLE_ATTRIBUTES = ['instanceDashArrays', 'instanceDashOffsets', 'instanceOffsets'];
22
+ function dashMetricsProjectionPropsChanged({ props, oldProps }) {
23
+ // Data, accessors, and tessellation configuration invalidate through AttributeManager and
24
+ // PathLayer. PathLayer separately tracks viewport projection scale. These are the remaining
25
+ // layer props consumed by the project uniforms used to calculate dash metrics.
26
+ return (!deepEqual(props.modelMatrix, oldProps.modelMatrix, 2) ||
27
+ props.coordinateSystem !== oldProps.coordinateSystem ||
28
+ !deepEqual(props.coordinateOrigin, oldProps.coordinateOrigin, 1));
29
+ }
30
+ function projectRenderedPathPosition(layer, position, projectUniforms) {
31
+ const viewport = layer.context.viewport;
32
+ if (!(viewport instanceof WebMercatorViewport) || viewport.zoom < 12) {
33
+ return layer.projectPosition(position, { autoOffset: false });
34
+ }
35
+ // High-zoom Web Mercator shaders use a center-relative Taylor projection for precision.
36
+ // Layer#projectPosition deliberately returns the exact, viewport-independent projection,
37
+ // so reproduce project_position here to keep CPU phase continuous with each GPU segment.
38
+ const positionWorld = vec4.transformMat4([], [position[0], position[1], position[2] || 0, 1], projectUniforms.modelMatrix);
39
+ const coordinateSystem = layer.props.coordinateSystem === 'default' ? 'lnglat' : layer.props.coordinateSystem;
40
+ if (coordinateSystem === 'lnglat') {
41
+ if (Math.abs(positionWorld[1] - projectUniforms.coordinateOrigin[1]) > 0.25) {
42
+ let longitude = positionWorld[0];
43
+ if (projectUniforms.wrapLongitude) {
44
+ longitude = ((((longitude + 180) % 360) + 360) % 360) - 180;
45
+ }
46
+ const commonPosition = viewport.projectPosition([longitude, positionWorld[1], 0]);
47
+ return [
48
+ commonPosition[0] - projectUniforms.commonOrigin[0],
49
+ commonPosition[1] - projectUniforms.commonOrigin[1],
50
+ positionWorld[2] * projectUniforms.commonUnitsPerMeter[2]
51
+ ];
52
+ }
53
+ vec3.sub(positionWorld, positionWorld, projectUniforms.coordinateOrigin);
54
+ }
55
+ else if (coordinateSystem === 'cartesian') {
56
+ vec3.sub(positionWorld, positionWorld, projectUniforms.coordinateOrigin);
57
+ }
58
+ const deltaLatitude = positionWorld[1];
59
+ const scale = vec3.scaleAndAdd([], projectUniforms.commonUnitsPerWorldUnit, projectUniforms.commonUnitsPerWorldUnit2, deltaLatitude);
60
+ return vec3.multiply([], positionWorld, scale);
61
+ }
13
62
  /** Adds selected features to the `PathLayer`, `ScatterplotLayer`, `TextBackgroundLayer`, and composite layers that render them. */
14
63
  class PathStyleExtension extends LayerExtension {
15
- constructor({ dash = false, offset = false, highPrecisionDash = false } = {}) {
16
- super({ dash: dash || highPrecisionDash, offset, highPrecisionDash });
64
+ constructor({ dash = false, offset = false, dashMode, highPrecisionDash = false } = {}) {
65
+ const resolvedDashMode = dashMode ?? (highPrecisionDash ? 'path' : 'segment');
66
+ super({
67
+ dash: dash || highPrecisionDash || dashMode !== undefined,
68
+ offset,
69
+ dashMode: resolvedDashMode,
70
+ highPrecisionDash: resolvedDashMode === 'path'
71
+ });
17
72
  }
18
73
  getLayerType(layer) {
19
74
  if ('pathTesselator' in layer.state) {
@@ -28,6 +83,59 @@ class PathStyleExtension extends LayerExtension {
28
83
  }
29
84
  return null;
30
85
  }
86
+ synchronizeAttributes(layer) {
87
+ const attributeManager = layer.getAttributeManager();
88
+ const layerType = this.getLayerType(layer);
89
+ if (!attributeManager || !layerType) {
90
+ return false;
91
+ }
92
+ const attributes = attributeManager.getAttributes();
93
+ const desiredAttributes = new Set();
94
+ if (this.opts.dash) {
95
+ desiredAttributes.add('instanceDashArrays');
96
+ }
97
+ if (layerType === 'path' && this.opts.dash && this.opts.dashMode === 'path') {
98
+ desiredAttributes.add('instanceDashOffsets');
99
+ }
100
+ if (layerType === 'path' && this.opts.offset) {
101
+ desiredAttributes.add('instanceOffsets');
102
+ }
103
+ let topologyChanged = false;
104
+ for (const attributeName of PATH_STYLE_ATTRIBUTES) {
105
+ if (attributes[attributeName] && !desiredAttributes.has(attributeName)) {
106
+ attributeManager.remove([attributeName]);
107
+ topologyChanged = true;
108
+ }
109
+ }
110
+ if (desiredAttributes.has('instanceDashArrays') && !attributes.instanceDashArrays) {
111
+ attributeManager.addInstanced({
112
+ instanceDashArrays: { size: 2, accessor: 'getDashArray' }
113
+ });
114
+ topologyChanged = true;
115
+ }
116
+ if (desiredAttributes.has('instanceDashOffsets') && !attributes.instanceDashOffsets) {
117
+ attributeManager.addInstanced({
118
+ instanceDashOffsets: {
119
+ // [distance from the start of the path, total length of the path]
120
+ size: 2,
121
+ // Recalculate from rendered geometry when getPath changes. A binary getPath buffer
122
+ // contains positions, not dash metrics, so keep it as an update trigger rather than
123
+ // binding it directly to this attribute.
124
+ accessor: ['getPath'],
125
+ // eslint-disable-next-line @typescript-eslint/unbound-method
126
+ update: this.calculateDashMetrics
127
+ }
128
+ });
129
+ topologyChanged = true;
130
+ }
131
+ if (desiredAttributes.has('instanceOffsets') && !attributes.instanceOffsets) {
132
+ attributeManager.addInstanced({
133
+ instanceOffsets: { size: 1, accessor: 'getOffset' }
134
+ });
135
+ topologyChanged = true;
136
+ }
137
+ return topologyChanged;
138
+ }
31
139
  isEnabled(layer) {
32
140
  return this.getLayerType(layer) !== null;
33
141
  }
@@ -57,59 +165,59 @@ class PathStyleExtension extends LayerExtension {
57
165
  const defines = {};
58
166
  if (extension.opts.dash) {
59
167
  result = mergeShaders(result, dashShaders);
60
- if (extension.opts.highPrecisionDash) {
168
+ defines.DASH_ENABLED = true;
169
+ if (extension.opts.dashMode === 'path') {
61
170
  defines.HIGH_PRECISION_DASH = true;
62
171
  }
63
172
  }
64
173
  if (extension.opts.offset) {
65
174
  result = mergeShaders(result, offsetShaders);
175
+ defines.PATH_STYLE_OFFSET = true;
66
176
  }
67
177
  const { inject } = result;
68
178
  const pathStyle = {
69
179
  name: 'pathStyle',
70
- inject,
71
- uniformTypes: {
72
- dashAlignMode: 'f32',
73
- dashGapPickable: 'i32'
74
- }
180
+ inject
75
181
  };
182
+ if (extension.opts.dash) {
183
+ pathStyle.uniformTypes = {
184
+ dashAlignMode: 'f32',
185
+ dashGapPickable: 'i32',
186
+ dashUnits: 'i32'
187
+ };
188
+ }
76
189
  return {
77
190
  modules: [pathStyle],
78
191
  defines
79
192
  };
80
193
  }
81
194
  initializeState(context, extension) {
82
- const attributeManager = this.getAttributeManager();
83
- const layerType = extension.getLayerType(this);
84
- if (!attributeManager || !layerType) {
85
- return;
86
- }
87
- if (extension.opts.dash) {
88
- attributeManager.addInstanced({
89
- instanceDashArrays: { size: 2, accessor: 'getDashArray' },
90
- ...(layerType === 'path' && extension.opts.highPrecisionDash
91
- ? {
92
- instanceDashOffsets: {
93
- size: 1,
94
- accessor: 'getPath',
95
- transform: extension.getDashOffsets.bind(this)
96
- }
97
- }
98
- : {})
99
- });
100
- }
101
- if (layerType === 'path' && extension.opts.offset) {
102
- attributeManager.addInstanced({
103
- instanceOffsets: { size: 1, accessor: 'getOffset' }
104
- });
105
- }
195
+ extension.synchronizeAttributes(this);
106
196
  }
107
197
  updateState(params, extension) {
108
198
  if (!extension.isEnabled(this)) {
109
199
  return;
110
200
  }
201
+ if (params.changeFlags.extensionsChanged) {
202
+ const topologyChanged = extension.synchronizeAttributes(this);
203
+ const attributeManager = this.getAttributeManager();
204
+ if (attributeManager && topologyChanged) {
205
+ // PathLayer recreates its model before extension updateState runs. Refresh the new
206
+ // model's layout after adding or removing extension-owned attributes, then ensure all
207
+ // managed buffers are rebound to the recreated vertex array.
208
+ attributeManager.invalidateAll();
209
+ for (const model of this.getModels()) {
210
+ model.setBufferLayout(attributeManager.getBufferLayouts(model));
211
+ }
212
+ }
213
+ }
111
214
  if (extension.opts.dash) {
112
215
  const layerType = extension.getLayerType(this);
216
+ if (layerType === 'path' &&
217
+ extension.opts.dashMode === 'path' &&
218
+ dashMetricsProjectionPropsChanged(params)) {
219
+ this.getAttributeManager()?.invalidate('instanceDashOffsets');
220
+ }
113
221
  if (layerType === 'scatterplot' || layerType === 'textBackground') {
114
222
  const pathStyleProps = {
115
223
  dashGapPickable: Boolean(this.props.dashGapPickable)
@@ -119,12 +227,104 @@ class PathStyleExtension extends LayerExtension {
119
227
  else {
120
228
  const pathStyleProps = {
121
229
  dashAlignMode: this.props.dashJustified ? 1 : 0,
122
- dashGapPickable: Boolean(this.props.dashGapPickable)
230
+ dashGapPickable: Boolean(this.props.dashGapPickable),
231
+ dashUnits: DASH_UNITS[this.props.dashUnits ?? 'widths']
123
232
  };
124
233
  this.setShaderModuleProps({ pathStyle: pathStyleProps });
125
234
  }
126
235
  }
127
236
  }
237
+ calculateDashMetrics(attribute, { startRow, endRow }) {
238
+ const pathTesselator = this.state.pathTesselator;
239
+ const vertexStarts = pathTesselator?.vertexStarts;
240
+ const instanceCount = pathTesselator?.instanceCount;
241
+ const packedPositions = pathTesselator?.get('positions');
242
+ if (!vertexStarts ||
243
+ instanceCount === undefined ||
244
+ typeof pathTesselator?.getPathSegmentIndices !== 'function') {
245
+ throw new Error('PathStyleExtension requires PathLayer tessellation data for path dashes.');
246
+ }
247
+ const binaryPath = this.props.data?.attributes?.getPath;
248
+ const binaryValue = ArrayBuffer.isView(binaryPath) ? binaryPath : binaryPath?.value;
249
+ const hasReadableBinaryPath = ArrayBuffer.isView(binaryValue);
250
+ // With `_pathType`, WebGL binds binary positions directly and the tesselator's allocated
251
+ // positions array is only a zero-filled placeholder. WebGPU materializes packed neighboring
252
+ // positions when the binary source is CPU-readable; GPU-only sources are rejected below.
253
+ const usePackedPositions = packedPositions && (!binaryPath || pathTesselator.normalize || pathTesselator.opts?.isWebGPU);
254
+ if ((binaryPath && !hasReadableBinaryPath) || (!usePackedPositions && !hasReadableBinaryPath)) {
255
+ throw new Error('PathStyleExtension cannot calculate whole-path dash metrics from GPU-only getPath data; ' +
256
+ 'supply data.attributes.instanceDashOffsets.');
257
+ }
258
+ const output = attribute.value;
259
+ const metricSize = attribute.size;
260
+ const firstRow = Math.max(0, startRow);
261
+ const lastRow = Math.min(endRow, vertexStarts.length - 1);
262
+ let binarySize = 3;
263
+ let binaryStride = 3;
264
+ let binaryOffset = 0;
265
+ if (!usePackedPositions) {
266
+ const bytesPerElement = binaryValue.BYTES_PER_ELEMENT;
267
+ binarySize = binaryPath?.size || (this.props.positionFormat === 'XY' ? 2 : 3);
268
+ binaryStride = binaryPath?.stride ? binaryPath.stride / bytesPerElement : binarySize;
269
+ binaryOffset = binaryPath?.offset ? binaryPath.offset / bytesPerElement : 0;
270
+ }
271
+ const sourcePosition = new Array(3);
272
+ const projectUniforms = project.getUniforms({
273
+ viewport: this.context.viewport,
274
+ modelMatrix: this.props.modelMatrix,
275
+ coordinateSystem: this.props.coordinateSystem,
276
+ coordinateOrigin: this.props.coordinateOrigin,
277
+ // PathLayer normalizes/cuts wrapped paths on the CPU; its shader never wraps again.
278
+ autoWrapLongitude: this.wrapLongitude
279
+ });
280
+ const readPosition = (vertexIndex) => {
281
+ if (usePackedPositions) {
282
+ sourcePosition[0] = packedPositions[vertexIndex * 3];
283
+ sourcePosition[1] = packedPositions[vertexIndex * 3 + 1];
284
+ sourcePosition[2] = packedPositions[vertexIndex * 3 + 2];
285
+ }
286
+ else {
287
+ const sourceIndex = binaryOffset + vertexIndex * binaryStride;
288
+ sourcePosition[0] = binaryValue[sourceIndex];
289
+ sourcePosition[1] = binaryValue[sourceIndex + 1];
290
+ sourcePosition[2] = binarySize === 3 ? binaryValue[sourceIndex + 2] : 0;
291
+ }
292
+ return sourcePosition;
293
+ };
294
+ attribute.startIndices = vertexStarts;
295
+ for (let row = firstRow; row < lastRow; row++) {
296
+ const rowStart = vertexStarts[row];
297
+ const rowEnd = Math.min(vertexStarts[row + 1] ?? instanceCount, instanceCount);
298
+ output.fill(0, rowStart * metricSize, rowEnd * metricSize);
299
+ const validSegments = pathTesselator.getPathSegmentIndices(row);
300
+ let phase = 0;
301
+ let previousSegment = -2;
302
+ let previousEnd = null;
303
+ for (const segmentIndex of validSegments) {
304
+ const outputIndex = segmentIndex * metricSize;
305
+ output[outputIndex] = phase;
306
+ const start = segmentIndex === previousSegment + 1 && previousEnd
307
+ ? previousEnd
308
+ : projectRenderedPathPosition(this, readPosition(segmentIndex), projectUniforms);
309
+ const end = projectRenderedPathPosition(this, readPosition(segmentIndex + 1), projectUniforms);
310
+ phase += vec3.dist(start, end);
311
+ previousSegment = segmentIndex;
312
+ previousEnd = end;
313
+ }
314
+ if (metricSize > 1) {
315
+ for (let vertexIndex = rowStart; vertexIndex < rowEnd; vertexIndex++) {
316
+ output[vertexIndex * metricSize + 1] = phase;
317
+ }
318
+ }
319
+ }
320
+ }
321
+ /**
322
+ * Calculates the distance from the start of a path to each rendered segment.
323
+ *
324
+ * The final entry is zero because PathLayer reserves the final vertex as invalid padding.
325
+ * This scalar return shape is retained for compatibility; path-mode rendering uses an
326
+ * internal attribute containing both each segment offset and the total path length.
327
+ */
128
328
  getDashOffsets(path) {
129
329
  const result = [0];
130
330
  const positionSize = this.props.positionFormat === 'XY' ? 2 : 3;
@@ -134,7 +334,7 @@ class PathStyleExtension extends LayerExtension {
134
334
  let prevP;
135
335
  for (let i = 0; i < geometrySize - 1; i++) {
136
336
  p = isNested ? path[i] : path.slice(i * positionSize, i * positionSize + positionSize);
137
- p = this.projectPosition(p);
337
+ p = this.projectPosition(p, { autoOffset: false });
138
338
  if (i > 0) {
139
339
  result[i] = result[i - 1] + vec3.dist(prevP, p);
140
340
  }
@@ -1 +1 @@
1
- {"version":3,"file":"path-style-extension.js","sourceRoot":"","sources":["../../src/path-style/path-style-extension.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,cAAc,EAAE,aAAa,IAAI,YAAY,EAAC,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAC,IAAI,EAAC,MAAM,eAAe,CAAC;AACnC,OAAO,EACL,WAAW,EAEX,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EAC1B,0BAAuB;AAKxB,MAAM,YAAY,GAAG;IACnB,YAAY,EAAE,EAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC;IAC/C,SAAS,EAAE,EAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAC;IACvC,aAAa,EAAE,KAAK;IACpB,eAAe,EAAE,KAAK;CACvB,CAAC;AAuDF,mIAAmI;AACnI,MAAqB,kBAAmB,SAAQ,cAAyC;IAIvF,YAAY,EACV,IAAI,GAAG,KAAK,EACZ,MAAM,GAAG,KAAK,EACd,iBAAiB,GAAG,KAAK,KACa,EAAE;QACxC,KAAK,CAAC,EAAC,IAAI,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,EAAC,CAAC,CAAC;IACtE,CAAC;IAEO,YAAY,CAAC,KAAY;QAC/B,IAAI,gBAAgB,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACpC,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,SAAS,GAAI,KAAK,CAAC,WAAmB,CAAC,SAAS,CAAC;QACvD,IAAI,SAAS,KAAK,kBAAkB,EAAE,CAAC;YACrC,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,IAAI,SAAS,KAAK,qBAAqB,EAAE,CAAC;YACxC,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,KAAqC;QAC7C,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;IAC3C,CAAC;IAED,UAAU,CAAuC,SAAe;QAC9D,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,gBAAgB,EAAE,CAAC;YAClE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,MAAM,GACV,SAAS,KAAK,aAAa;gBACzB,CAAC,CAAC,sBAAsB,CAAC,MAAM;gBAC/B,CAAC,CAAC,yBAAyB,CAAC,MAAM,CAAC;YACvC,MAAM,SAAS,GAAoC;gBACjD,IAAI,EAAE,WAAW;gBACjB,MAAM;gBACN,YAAY,EAAE;oBACZ,eAAe,EAAE,KAAK;iBACvB;aACF,CAAC;YACF,OAAO,EAAC,OAAO,EAAE,CAAC,SAAS,CAAC,EAAC,CAAC;QAChC,CAAC;QAED,4BAA4B;QAC5B,IAAI,MAAM,GAAG,EAAsC,CAAC;QACpD,MAAM,OAAO,GAAY,EAAE,CAAC;QAC5B,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAC3C,IAAI,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACrC,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;YACrC,CAAC;QACH,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM,CAAC;QACxB,MAAM,SAAS,GAAiC;YAC9C,IAAI,EAAE,WAAW;YACjB,MAAM;YACN,YAAY,EAAE;gBACZ,aAAa,EAAE,KAAK;gBACpB,eAAe,EAAE,KAAK;aACvB;SACF,CAAC;QACF,OAAO;YACL,OAAO,EAAE,CAAC,SAAS,CAAC;YACpB,OAAO;SACR,CAAC;IACJ,CAAC;IAED,eAAe,CAAuC,OAAqB,EAAE,SAAe;QAC1F,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACpD,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,gBAAgB,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,OAAO;QACT,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,gBAAgB,CAAC,YAAY,CAAC;gBAC5B,kBAAkB,EAAE,EAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAC;gBACvD,GAAG,CAAC,SAAS,KAAK,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,iBAAiB;oBAC1D,CAAC,CAAC;wBACE,mBAAmB,EAAE;4BACnB,IAAI,EAAE,CAAC;4BACP,QAAQ,EAAE,SAAS;4BACnB,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;yBAC/C;qBACF;oBACH,CAAC,CAAC,EAAE,CAAC;aACR,CAAC,CAAC;QACL,CAAC;QACD,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAClD,gBAAgB,CAAC,YAAY,CAAC;gBAC5B,eAAe,EAAE,EAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAC;aAClD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,WAAW,CAET,MAAwD,EACxD,SAAe;QAEf,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,gBAAgB,EAAE,CAAC;gBAClE,MAAM,cAAc,GAAsB;oBACxC,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;iBACrD,CAAC;gBACF,IAAI,CAAC,oBAAoB,CAAC,EAAC,SAAS,EAAE,cAAc,EAAC,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,MAAM,cAAc,GAAmB;oBACrC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/C,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;iBACrD,CAAC;gBACF,IAAI,CAAC,oBAAoB,CAAC,EAAC,SAAS,EAAE,cAAc,EAAC,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;IACH,CAAC;IAED,cAAc,CAAuC,IAA2B;QAC9E,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACnB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;QAEzE,IAAI,CAAC,CAAC;QACN,IAAI,KAAK,CAAC;QACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,EAAE,CAAC,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC;YACvF,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAE5B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACV,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAClD,CAAC;YAED,KAAK,GAAG,CAAC,CAAC;QACZ,CAAC;QACD,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC;IAChB,CAAC;;AA3JM,+BAAY,GAAG,YAAY,CAAC;AAC5B,gCAAa,GAAG,oBAAoB,CAAC;eAFzB,kBAAkB"}
1
+ {"version":3,"file":"path-style-extension.js","sourceRoot":"","sources":["../../src/path-style/path-style-extension.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,36 @@
1
+ /**
2
+ * Dash shader injections for PathLayer, ScatterplotLayer and TextBackgroundLayer.
3
+ *
4
+ * PathLayer dash math crosses three coordinate spaces:
5
+ *
6
+ * 1. **Common space** — the private metric updater accumulates distance over normalized
7
+ * PathTessellator geometry, and `instanceDashOffsets` carries it to the shader. The public
8
+ * scalar `getDashOffsets` helper remains available for compatibility but does not back the
9
+ * managed attribute.
10
+ * 2. **Screen pixels** — the common basis for reconciling flat and billboard extrusion.
11
+ * At the dash injection point, `width` is in common units for a flat path but pixels for
12
+ * a billboarded path, whose conversion also includes `project.focalDistance`.
13
+ * `dashWidthPixels` is correct in both branches.
14
+ * 3. **Half-widths along the path** — the units of `vPathPosition.y`, tested by the fragment
15
+ * shader. One unit spans `dashWidthPixels` screen pixels.
16
+ *
17
+ * Convert explicitly whenever a value crosses these spaces. Mixing them directly makes dash
18
+ * period or phase depend on billboard, elevation, or offset configuration.
19
+ */
1
20
  export type Defines = {
2
21
  /**
3
22
  * Enable high precision dash rendering.
4
23
  */
5
24
  HIGH_PRECISION_DASH?: boolean;
25
+ /**
26
+ * Set whenever the dash shaders are injected, so that the offset shaders can adjust dash
27
+ * varyings only when they actually exist.
28
+ */
29
+ DASH_ENABLED?: boolean;
30
+ /**
31
+ * Set when PathStyleExtension offset shaders remap the path-width coordinate.
32
+ */
33
+ PATH_STYLE_OFFSET?: boolean;
6
34
  };
7
35
  export declare const dashShaders: {
8
36
  inject: {
@@ -10,6 +38,7 @@ export declare const dashShaders: {
10
38
  'vs:#main-end': string;
11
39
  'fs:#decl': string;
12
40
  'fs:#main-start': string;
41
+ 'fs:#main-end': string;
13
42
  };
14
43
  };
15
44
  export declare const scatterplotDashShaders: {
@@ -35,7 +64,7 @@ export declare const offsetShaders: {
35
64
  'vs:#decl': string;
36
65
  'vs:DECKGL_FILTER_SIZE': string;
37
66
  'vs:#main-end': string;
38
- 'fs:#main-start': string;
67
+ 'fs:#main-end': string;
39
68
  };
40
69
  };
41
70
  //# sourceMappingURL=shaders.glsl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shaders.glsl.d.ts","sourceRoot":"","sources":["../../src/path-style/shaders.glsl.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,OAAO,GAAG;IAEpB;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;CA4EvB,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;CAwDlC,CAAC;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;CAyJrC,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;CAwBzB,CAAC"}
1
+ {"version":3,"file":"shaders.glsl.d.ts","sourceRoot":"","sources":["../../src/path-style/shaders.glsl.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,OAAO,GAAG;IAEpB;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;;CAoQvB,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;CAwDlC,CAAC;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;CAyJrC,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;CAqDzB,CAAC"}
@@ -6,26 +6,68 @@ export const dashShaders = {
6
6
  'vs:#decl': `
7
7
  in vec2 instanceDashArrays;
8
8
  #ifdef HIGH_PRECISION_DASH
9
- in float instanceDashOffsets;
9
+ in vec2 instanceDashOffsets;
10
10
  #endif
11
11
  out vec2 vDashArray;
12
12
  out float vDashOffset;
13
+ out float vDashPathLength;
14
+ layout(std140) uniform pathStyleUniforms {
15
+ float dashAlignMode;
16
+ bool dashGapPickable;
17
+ highp int dashUnits;
18
+ } pathStyle;
13
19
  `,
14
20
  'vs:#main-end': `
15
- vDashArray = instanceDashArrays;
21
+ float dashWidthPixels = path.billboard
22
+ ? width.x * project.focalDistance
23
+ : width.x * project.scale;
24
+ float strokeHalfWidthPixels = path.billboard ? width.x : width.x * project.scale;
25
+ float dashUnitPixels = strokeHalfWidthPixels;
26
+ if (pathStyle.dashUnits == 1) {
27
+ dashUnitPixels = 1.0;
28
+ } else if (pathStyle.dashUnits == 2) {
29
+ dashUnitPixels = project_size_to_pixel(1.0);
30
+ } else if (pathStyle.dashUnits == 3) {
31
+ dashUnitPixels = project.scale;
32
+ }
33
+ vDashArray = instanceDashArrays * (dashUnitPixels / dashWidthPixels);
16
34
  #ifdef HIGH_PRECISION_DASH
17
- vDashOffset = instanceDashOffsets / width.x;
35
+ vec2 dashOffsetAndLength = (instanceDashOffsets * project.scale) / dashWidthPixels;
36
+ vDashPathLength = dashOffsetAndLength.y;
37
+ float dashUnitLength = vDashArray.x + vDashArray.y;
38
+ float dashPeriod = pathStyle.dashAlignMode == 0.0
39
+ ? dashUnitLength
40
+ : vDashPathLength / max(round(vDashPathLength / max(dashUnitLength, 0.0001)), 1.0);
41
+ vDashOffset = dashPeriod > 0.0 ? mod(dashOffsetAndLength.x, dashPeriod) : 0.0;
18
42
  #else
19
43
  vDashOffset = 0.0;
44
+ vDashPathLength = 0.0;
20
45
  #endif
21
46
  `,
22
47
  'fs:#decl': `
23
48
  layout(std140) uniform pathStyleUniforms {
24
49
  float dashAlignMode;
25
50
  bool dashGapPickable;
51
+ highp int dashUnits;
26
52
  } pathStyle;
27
53
  in vec2 vDashArray;
28
54
  in float vDashOffset;
55
+ in float vDashPathLength;
56
+ float dashPatternIntegral(float position, float solidLength, float unitLength) {
57
+ return floor(position / unitLength) * solidLength +
58
+ min(mod(position, unitLength), solidLength);
59
+ }
60
+ float dashPatternCoverage(
61
+ float position,
62
+ float solidLength,
63
+ float unitLength,
64
+ float filterWidth
65
+ ) {
66
+ float halfFilter = 0.5 * filterWidth;
67
+ float reducedPosition = mod(position, unitLength);
68
+ return (dashPatternIntegral(reducedPosition + halfFilter, solidLength, unitLength) -
69
+ dashPatternIntegral(reducedPosition - halfFilter, solidLength, unitLength)) / filterWidth;
70
+ }
29
71
  `,
30
72
  // if given position is in the gap part of the dashed line
31
73
  // dashArray.x: solid stroke length, relative to width
@@ -36,36 +78,90 @@ in float vDashOffset;
36
78
  // 1 - stretch to fit, draw half dash at each end for nicer joints
37
79
  // o-- ---- ---- ---- --o-- --o-- ---- --o
38
80
  'fs:#main-start': `
81
+ float dashCoverage = 1.0;
82
+ bool shouldDiscardDash = false;
83
+ bool inRoundedDashGap = false;
84
+ float roundedDashResolvedCoverage = 1.0;
85
+ float roundedDashSubPixelBlend = 0.0;
86
+ float roundedDashDutyCycle = 1.0;
39
87
  float solidLength = vDashArray.x;
40
88
  float gapLength = vDashArray.y;
41
89
  float unitLength = solidLength + gapLength;
90
+ if (unitLength > 0.0 && gapLength > 0.0) {
42
91
  float offset;
43
- if (unitLength > 0.0) {
44
92
  if (pathStyle.dashAlignMode == 0.0) {
45
93
  offset = vDashOffset;
46
94
  } else {
47
- unitLength = vPathLength / round(vPathLength / unitLength);
95
+ #ifdef HIGH_PRECISION_DASH
96
+ unitLength = vDashPathLength / max(round(vDashPathLength / unitLength), 1.0);
97
+ #else
98
+ unitLength = vPathLength / max(round(vPathLength / unitLength), 1.0);
99
+ #endif
100
+ solidLength = min(solidLength, unitLength);
48
101
  offset = solidLength / 2.0;
102
+ #ifdef HIGH_PRECISION_DASH
103
+ offset += vDashOffset;
104
+ #endif
49
105
  }
50
- float unitOffset = mod(vPathPosition.y + offset, unitLength);
51
- if (gapLength > 0.0 && unitOffset > solidLength) {
52
- if (path.capType <= 0.5) {
53
- if (!(pathStyle.dashGapPickable && bool(picking.isActive))) {
54
- discard;
55
- }
56
- } else {
57
- float distToEnd = length(vec2(
106
+ float alongPath = vPathPosition.y + offset;
107
+ float unitOffset = mod(alongPath, unitLength);
108
+ float filterWidth = max(fwidth(alongPath), 0.0001);
109
+ if (bool(picking.isActive)) {
110
+ bool inGap = unitOffset > solidLength;
111
+ if (inGap && path.capType > 0.5) {
112
+ inGap = length(vec2(
58
113
  min(unitOffset - solidLength, unitLength - unitOffset),
59
114
  vPathPosition.x
60
- ));
61
- if (distToEnd > 1.0) {
62
- if (!(pathStyle.dashGapPickable && bool(picking.isActive))) {
63
- discard;
115
+ )) > 1.0;
64
116
  }
117
+ if (inGap && !pathStyle.dashGapPickable) {
118
+ shouldDiscardDash = true;
65
119
  }
120
+ } else if (path.capType <= 0.5) {
121
+ dashCoverage = dashPatternCoverage(alongPath, solidLength, unitLength, filterWidth);
122
+ } else {
123
+ float distanceAlongGap = min(unitOffset - solidLength, unitLength - unitOffset);
124
+ float distanceToEnd = length(vec2(max(distanceAlongGap, 0.0), vPathPosition.x));
125
+ float capEdgePixels = (1.0 - distanceToEnd) / max(fwidth(distanceToEnd), 1e-6);
126
+ if (distanceAlongGap > 0.0) {
127
+ inRoundedDashGap = true;
128
+ roundedDashResolvedCoverage = smoothedge(0.0, capEdgePixels);
129
+ dashCoverage = roundedDashResolvedCoverage;
66
130
  }
131
+ float subPixelBlend = smoothstep(unitLength, 2.0 * unitLength, filterWidth);
132
+ roundedDashSubPixelBlend = subPixelBlend;
133
+ float boundedSolidLength = min(solidLength, unitLength);
134
+ float effectiveGap = max(unitLength - boundedSolidLength, 0.0);
135
+ float capSpan = 2.0 * sqrt(max(1.0 - vPathPosition.x * vPathPosition.x, 0.0));
136
+ float roundedDutyCycle = clamp(
137
+ (boundedSolidLength + min(effectiveGap, capSpan)) / unitLength,
138
+ 0.0,
139
+ 1.0
140
+ );
141
+ roundedDashDutyCycle = roundedDutyCycle;
142
+ dashCoverage = mix(dashCoverage, roundedDutyCycle, subPixelBlend);
67
143
  }
144
+ dashCoverage = clamp(dashCoverage, 0.0, 1.0);
145
+ shouldDiscardDash = shouldDiscardDash || dashCoverage <= 0.0;
146
+ }
147
+ `,
148
+ 'fs:#main-end': `
149
+ #ifdef ANTIALIASING
150
+ if (inRoundedDashGap) {
151
+ float pathCoverage = smoothedge(0.0, edgePixels);
152
+ float resolvedCapMultiplier =
153
+ min(pathCoverage, roundedDashResolvedCoverage) / max(pathCoverage, 1e-6);
154
+ dashCoverage = mix(
155
+ resolvedCapMultiplier,
156
+ roundedDashDutyCycle,
157
+ roundedDashSubPixelBlend
158
+ );
159
+ }
160
+ #endif
161
+ if (shouldDiscardDash) {
162
+ discard;
68
163
  }
164
+ fragColor.a *= dashCoverage;
69
165
  `
70
166
  }
71
167
  };
@@ -266,13 +362,32 @@ float offsetDir = sign(instanceOffsets);
266
362
  vPathPosition.x = (vPathPosition.x + offsetDir) * offsetWidth - offsetDir;
267
363
  vPathPosition.y *= offsetWidth;
268
364
  vPathLength *= offsetWidth;
365
+ #ifdef DASH_ENABLED
366
+ if (pathStyle.dashUnits != 0) {
367
+ vDashArray *= offsetWidth;
368
+ }
369
+ vPathBounds *= offsetWidth;
370
+ #ifdef HIGH_PRECISION_DASH
371
+ vDashPathLength *= offsetWidth;
372
+ float restoredDashUnitLength = vDashArray.x + vDashArray.y;
373
+ float restoredDashPeriod = pathStyle.dashAlignMode == 0.0
374
+ ? restoredDashUnitLength
375
+ : vDashPathLength /
376
+ max(round(vDashPathLength / max(restoredDashUnitLength, 0.0001)), 1.0);
377
+ vDashOffset = restoredDashPeriod > 0.0
378
+ ? mod(dashOffsetAndLength.x * offsetWidth, restoredDashPeriod)
379
+ : 0.0;
380
+ #else
381
+ vDashOffset *= offsetWidth;
382
+ #endif
383
+ #endif
269
384
  `,
270
- 'fs:#main-start': `
271
- float isInside;
272
- isInside = step(-1.0, vPathPosition.x) * step(vPathPosition.x, 1.0);
273
- if (isInside == 0.0) {
385
+ 'fs:#main-end': `
386
+ #ifndef ANTIALIASING
387
+ if (abs(vPathPosition.x) > 1.0) {
274
388
  discard;
275
389
  }
390
+ #endif
276
391
  `
277
392
  }
278
393
  };
@@ -1 +1 @@
1
- {"version":3,"file":"shaders.glsl.js","sourceRoot":"","sources":["../../src/path-style/shaders.glsl.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAUpC,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE;QACN,UAAU,EAAE;;;;;;;CAOf;QAEG,cAAc,EAAE;;;;;;;CAOnB;QAEG,UAAU;;;;;;;CAQb;QAEG,0DAA0D;QAC1D,sDAAsD;QACtD,6CAA6C;QAC7C,aAAa;QACb,oBAAoB;QACpB,mEAAmE;QACnE,kEAAkE;QAClE,mEAAmE;QACnE,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCnB;KACE;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,MAAM,EAAE;QACN,UAAU,EAAE;;;CAGf;QAEG,cAAc,EAAE;;CAEnB;QAEG,UAAU;;;;;;CAQb;QAEG,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;CAwBnB;QAEG,cAAc;;;;;;;CAOjB;KACE;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,MAAM,EAAE;QACN,UAAU,EAAE;;;CAGf;QAEG,cAAc,EAAE;;CAEnB;QAEG,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkGb;QAEG,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BnB;QAEG,cAAc;;;;;;;CAOjB;KACE;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,MAAM,EAAE;QACN,UAAU,EAAE;;CAEf;QACG,uBAAuB;;;CAG1B;QACG,cAAc;;;;;;CAMjB;QACG,gBAAgB;;;;;;CAMnB;KACE;CACF,CAAC"}
1
+ {"version":3,"file":"shaders.glsl.js","sourceRoot":"","sources":["../../src/path-style/shaders.glsl.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAsCpC,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE;QACN,UAAU;;;;;;;;;;;;;CAkBb;QAEG,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;CAwDjB;QAEG,UAAU;;;;;;;;;;;;;;;;;;;;;;;;CA0Cb;QAEG,0DAA0D;QAC1D,sDAAsD;QACtD,6CAA6C;QAC7C,aAAa;QACb,oBAAoB;QACpB,mEAAmE;QACnE,kEAAkE;QAClE,mEAAmE;QACnE,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoGnB;QAEG,cAAc;;;;;;;;;;;;;;;;;CAwBjB;KACE;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,MAAM,EAAE;QACN,UAAU,EAAE;;;CAGf;QAEG,cAAc,EAAE;;CAEnB;QAEG,UAAU;;;;;;CAQb;QAEG,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;CAwBnB;QAEG,cAAc;;;;;;;CAOjB;KACE;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,MAAM,EAAE;QACN,UAAU,EAAE;;;CAGf;QAEG,cAAc,EAAE;;CAEnB;QAEG,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkGb;QAEG,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BnB;QAEG,cAAc;;;;;;;CAOjB;KACE;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,MAAM,EAAE;QACN,UAAU,EAAE;;CAEf;QACG,uBAAuB;;;CAG1B;QACG,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;CAgCjB;QACG,cAAc;;;;;;CASjB;KACE;CACF,CAAC"}