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

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 +946 -172
  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 +6 -6
  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,8 +1,19 @@
1
1
  import { LayerExtension } from '@deck.gl/core';
2
2
  import type { Accessor, Layer, LayerContext, UpdateParameters } from '@deck.gl/core';
3
+ /**
4
+ * What `getDashArray` is measured in.
5
+ *
6
+ * `'widths'` is relative to half the stroke width and is the historical behavior, so a dash
7
+ * scales with the line. `'pixels'` uses nominal zoom-stable projected pixels: exact for flat or
8
+ * orthographic paths and approximate under pitch, perspective, or elevation. `'meters'` uses the
9
+ * local projection scale, while `'common'` uses deck.gl common-coordinate-space units.
10
+ */
11
+ export type DashUnits = 'widths' | 'pixels' | 'meters' | 'common';
3
12
  export type PathStyleExtensionProps<DataT = any> = {
4
13
  /**
5
- * Accessor for the dash array to draw each path with: `[dashSize, gapSize]` relative to the width of the path.
14
+ * Accessor for the dash array to draw each path with: `[dashSize, gapSize]` in the units
15
+ * selected by `dashUnits`. By default those units are relative to *half* the path width,
16
+ * so `[4, 5]` on a path 10 pixels wide draws 20 pixel dashes separated by 25 pixel gaps.
6
17
  * Requires the `dash` option to be on.
7
18
  */
8
19
  getDashArray?: Accessor<DataT, Readonly<[number, number]>>;
@@ -22,26 +33,47 @@ export type PathStyleExtensionProps<DataT = any> = {
22
33
  * @default false
23
34
  */
24
35
  dashGapPickable?: boolean;
36
+ /**
37
+ * What `getDashArray` is measured in. `'widths'` is relative to half the stroke width, so a
38
+ * dash scales with the line. `'pixels'` uses nominal zoom-stable projected pixels, which are
39
+ * exact for flat or orthographic paths and approximate under pitch, perspective, or elevation.
40
+ * `'meters'` uses the local projection scale and `'common'` uses deck.gl common space.
41
+ * Only applies to `PathLayer` and composite layers that render paths; scatterplot outlines
42
+ * and text backgrounds continue to interpret dash arrays relative to their stroke width.
43
+ * @default 'widths'
44
+ */
45
+ dashUnits?: DashUnits;
25
46
  };
47
+ /** How the dash pattern is positioned along a path. */
48
+ export type DashMode = 'segment' | 'path';
49
+ /** Options for configuring a {@link PathStyleExtension}. */
26
50
  export type PathStyleExtensionOptions = {
27
51
  /**
28
52
  * Add capability to render dashed lines.
29
53
  * @default false
30
54
  */
31
- dash: boolean;
55
+ dash?: boolean;
32
56
  /**
33
57
  * Add capability to offset lines.
34
58
  * @default false
35
59
  */
36
- offset: boolean;
60
+ offset?: boolean;
61
+ /**
62
+ * How the dash pattern is positioned along a path. `'path'` keeps dashes continuous across
63
+ * rendered segments, at the cost of a vertex attribute and a CPU pass over the geometry.
64
+ * @default 'segment'
65
+ */
66
+ dashMode?: DashMode;
37
67
  /**
38
68
  * Improve dash rendering quality in certain circumstances. Note that this option introduces additional performance overhead.
69
+ * @deprecated Use `dashMode: 'path'` instead.
39
70
  * @default false
40
71
  */
41
- highPrecisionDash: boolean;
72
+ highPrecisionDash?: boolean;
42
73
  };
74
+ type ResolvedPathStyleExtensionOptions = Required<PathStyleExtensionOptions>;
43
75
  /** Adds selected features to the `PathLayer`, `ScatterplotLayer`, `TextBackgroundLayer`, and composite layers that render them. */
44
- export default class PathStyleExtension extends LayerExtension<PathStyleExtensionOptions> {
76
+ export default class PathStyleExtension extends LayerExtension<ResolvedPathStyleExtensionOptions> {
45
77
  static defaultProps: {
46
78
  getDashArray: {
47
79
  type: string;
@@ -53,14 +85,25 @@ export default class PathStyleExtension extends LayerExtension<PathStyleExtensio
53
85
  };
54
86
  dashJustified: boolean;
55
87
  dashGapPickable: boolean;
88
+ dashUnits: string;
56
89
  };
57
90
  static extensionName: string;
58
- constructor({ dash, offset, highPrecisionDash }?: Partial<PathStyleExtensionOptions>);
91
+ constructor({ dash, offset, dashMode, highPrecisionDash }?: PathStyleExtensionOptions);
59
92
  private getLayerType;
93
+ private synchronizeAttributes;
60
94
  isEnabled(layer: Layer<PathStyleExtensionProps>): boolean;
61
95
  getShaders(this: Layer<PathStyleExtensionProps>, extension: this): any;
62
96
  initializeState(this: Layer<PathStyleExtensionProps>, context: LayerContext, extension: this): void;
63
97
  updateState(this: Layer<PathStyleExtensionProps>, params: UpdateParameters<Layer<PathStyleExtensionProps>>, extension: this): void;
98
+ private calculateDashMetrics;
99
+ /**
100
+ * Calculates the distance from the start of a path to each rendered segment.
101
+ *
102
+ * The final entry is zero because PathLayer reserves the final vertex as invalid padding.
103
+ * This scalar return shape is retained for compatibility; path-mode rendering uses an
104
+ * internal attribute containing both each segment offset and the total path length.
105
+ */
64
106
  getDashOffsets(this: Layer<PathStyleExtensionProps>, path: number[] | number[][]): number[];
65
107
  }
108
+ export {};
66
109
  //# sourceMappingURL=path-style-extension.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"path-style-extension.d.ts","sourceRoot":"","sources":["../../src/path-style/path-style-extension.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,cAAc,EAAgC,MAAM,eAAe,CAAC;AAU5E,OAAO,KAAK,EAAC,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAmBnF,MAAM,MAAM,uBAAuB,CAAC,KAAK,GAAG,GAAG,IAAI;IACjD;;;OAGG;IACH,YAAY,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3D;;;;OAIG;IACH,SAAS,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACpC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC;;;OAGG;IACH,IAAI,EAAE,OAAO,CAAC;IACd;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,iBAAiB,EAAE,OAAO,CAAC;CAC5B,CAAC;AAIF,mIAAmI;AACnI,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,cAAc,CAAC,yBAAyB,CAAC;IACvF,MAAM,CAAC,YAAY;;;;;;;;;;;MAAgB;IACnC,MAAM,CAAC,aAAa,SAAwB;gBAEhC,EACV,IAAY,EACZ,MAAc,EACd,iBAAyB,EAC1B,GAAE,OAAO,CAAC,yBAAyB,CAAM;IAI1C,OAAO,CAAC,YAAY;IAcpB,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,uBAAuB,CAAC,GAAG,OAAO;IAIzD,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,uBAAuB,CAAC,EAAE,SAAS,EAAE,IAAI,GAAG,GAAG;IAoDtE,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,uBAAuB,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI;IA4B5F,WAAW,CACT,IAAI,EAAE,KAAK,CAAC,uBAAuB,CAAC,EACpC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,EACxD,SAAS,EAAE,IAAI;IAuBjB,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,uBAAuB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE;CAqB5F"}
1
+ {"version":3,"file":"path-style-extension.d.ts","sourceRoot":"","sources":["../../src/path-style/path-style-extension.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,cAAc,EAKf,MAAM,eAAe,CAAC;AAUvB,OAAO,KAAK,EACV,QAAQ,EAER,KAAK,EACL,YAAY,EAEZ,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAWvB;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAoBlE,MAAM,MAAM,uBAAuB,CAAC,KAAK,GAAG,GAAG,IAAI;IACjD;;;;;OAKG;IACH,YAAY,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3D;;;;OAIG;IACH,SAAS,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACpC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,uDAAuD;AACvD,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAE1C,4DAA4D;AAC5D,MAAM,MAAM,yBAAyB,GAAG;IACtC;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,KAAK,iCAAiC,GAAG,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AAqE7E,mIAAmI;AACnI,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,cAAc,CAAC,iCAAiC,CAAC;IAC/F,MAAM,CAAC,YAAY;;;;;;;;;;;;MAAgB;IACnC,MAAM,CAAC,aAAa,SAAwB;gBAEhC,EACV,IAAY,EACZ,MAAc,EACd,QAAQ,EACR,iBAAyB,EAC1B,GAAE,yBAA8B;IAUjC,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,qBAAqB;IA0D7B,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,uBAAuB,CAAC,GAAG,OAAO;IAIzD,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,uBAAuB,CAAC,EAAE,SAAS,EAAE,IAAI,GAAG,GAAG;IAyDtE,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,uBAAuB,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI;IAI5F,WAAW,CACT,IAAI,EAAE,KAAK,CAAC,uBAAuB,CAAC,EACpC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,EACxD,SAAS,EAAE,IAAI;IA6CjB,OAAO,CAAC,oBAAoB;IA4G5B;;;;;;OAMG;IACH,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,uBAAuB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE;CAqB5F"}
@@ -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":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,OAAO,EACP,UAAU,IAAI,SAAS,EACvB,aAAa,IAAI,YAAY,EAC9B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,IAAI,EAAE,IAAI,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,WAAW,EAEX,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EAC1B,0BAAuB;AAYxB,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;IACtB,SAAS,EAAE,QAAQ;CACpB,CAAC;AAYF,8DAA8D;AAC9D,MAAM,UAAU,GAA8B;IAC5C,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;CACV,CAAC;AAiFF,MAAM,qBAAqB,GAAG,CAAC,oBAAoB,EAAE,qBAAqB,EAAE,iBAAiB,CAAC,CAAC;AAE/F,SAAS,iCAAiC,CAAC,EACzC,KAAK,EACL,QAAQ,EACyC;IACjD,0FAA0F;IAC1F,4FAA4F;IAC5F,+EAA+E;IAC/E,OAAO,CACL,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACtD,KAAK,CAAC,gBAAgB,KAAK,QAAQ,CAAC,gBAAgB;QACpD,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC,CACjE,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAClC,KAAqC,EACrC,QAAkB,EAClB,eAAgC;IAEhC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;IACxC,IAAI,CAAC,CAAC,QAAQ,YAAY,mBAAmB,CAAC,IAAI,QAAQ,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;QACrE,OAAO,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAC,UAAU,EAAE,KAAK,EAAC,CAAC,CAAC;IAC9D,CAAC;IAED,wFAAwF;IACxF,yFAAyF;IACzF,yFAAyF;IACzF,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CACtC,EAAE,EACF,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAC/C,eAAe,CAAC,WAAW,CAC5B,CAAC;IACF,MAAM,gBAAgB,GACpB,KAAK,CAAC,KAAK,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC;IAEvF,IAAI,gBAAgB,KAAK,QAAQ,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;YAC5E,IAAI,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,eAAe,CAAC,aAAa,EAAE,CAAC;gBAClC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YAC9D,CAAC;YACD,MAAM,cAAc,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAClF,OAAO;gBACL,cAAc,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC;gBACnD,cAAc,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC;gBACnD,aAAa,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAAC;aAC1D,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,aAAa,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;IAC3E,CAAC;SAAM,IAAI,gBAAgB,KAAK,WAAW,EAAE,CAAC;QAC5C,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,aAAa,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAC5B,EAAE,EACF,eAAe,CAAC,uBAAuB,EACvC,eAAe,CAAC,wBAAwB,EACxC,aAAa,CACd,CAAC;IACF,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,CAA6B,CAAC;AAC7E,CAAC;AAED,mIAAmI;AACnI,MAAqB,kBAAmB,SAAQ,cAAiD;IAI/F,YAAY,EACV,IAAI,GAAG,KAAK,EACZ,MAAM,GAAG,KAAK,EACd,QAAQ,EACR,iBAAiB,GAAG,KAAK,KACI,EAAE;QAC/B,MAAM,gBAAgB,GAAa,QAAQ,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACxF,KAAK,CAAC;YACJ,IAAI,EAAE,IAAI,IAAI,iBAAiB,IAAI,QAAQ,KAAK,SAAS;YACzD,MAAM;YACN,QAAQ,EAAE,gBAAgB;YAC1B,iBAAiB,EAAE,gBAAgB,KAAK,MAAM;SAC/C,CAAC,CAAC;IACL,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;IAEO,qBAAqB,CAAC,KAAqC;QACjE,MAAM,gBAAgB,GAAG,KAAK,CAAC,mBAAmB,EAAE,CAAC;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,gBAAgB,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,aAAa,EAAE,CAAC;QACpD,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC5C,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,iBAAiB,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,SAAS,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC5E,iBAAiB,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,SAAS,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7C,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,KAAK,MAAM,aAAa,IAAI,qBAAqB,EAAE,CAAC;YAClD,IAAI,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;gBACvE,gBAAgB,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;gBACzC,eAAe,GAAG,IAAI,CAAC;YACzB,CAAC;QACH,CAAC;QAED,IAAI,iBAAiB,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC;YAClF,gBAAgB,CAAC,YAAY,CAAC;gBAC5B,kBAAkB,EAAE,EAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAC;aACxD,CAAC,CAAC;YACH,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC;QACD,IAAI,iBAAiB,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC;YACpF,gBAAgB,CAAC,YAAY,CAAC;gBAC5B,mBAAmB,EAAE;oBACnB,kEAAkE;oBAClE,IAAI,EAAE,CAAC;oBACP,mFAAmF;oBACnF,oFAAoF;oBACpF,yCAAyC;oBACzC,QAAQ,EAAE,CAAC,SAAS,CAAC;oBACrB,6DAA6D;oBAC7D,MAAM,EAAE,IAAI,CAAC,oBAAoB;iBAClC;aACF,CAAC,CAAC;YACH,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC;QACD,IAAI,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;YAC5E,gBAAgB,CAAC,YAAY,CAAC;gBAC5B,eAAe,EAAE,EAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAC;aAClD,CAAC,CAAC;YACH,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,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,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;YAC5B,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACvC,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;YAC7C,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;QACnC,CAAC;QAED,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM,CAAC;QACxB,MAAM,SAAS,GAAiC;YAC9C,IAAI,EAAE,WAAW;YACjB,MAAM;SACP,CAAC;QACF,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,SAAS,CAAC,YAAY,GAAG;gBACvB,aAAa,EAAE,KAAK;gBACpB,eAAe,EAAE,KAAK;gBACtB,SAAS,EAAE,KAAK;aACjB,CAAC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,EAAE,CAAC,SAAS,CAAC;YACpB,OAAO;SACR,CAAC;IACJ,CAAC;IAED,eAAe,CAAuC,OAAqB,EAAE,SAAe;QAC1F,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACxC,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,MAAM,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC;YACzC,MAAM,eAAe,GAAG,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC9D,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACpD,IAAI,gBAAgB,IAAI,eAAe,EAAE,CAAC;gBACxC,mFAAmF;gBACnF,sFAAsF;gBACtF,6DAA6D;gBAC7D,gBAAgB,CAAC,aAAa,EAAE,CAAC;gBACjC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;oBACrC,KAAK,CAAC,eAAe,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC/C,IACE,SAAS,KAAK,MAAM;gBACpB,SAAS,CAAC,IAAI,CAAC,QAAQ,KAAK,MAAM;gBAClC,iCAAiC,CAAC,MAAM,CAAC,EACzC,CAAC;gBACD,IAAI,CAAC,mBAAmB,EAAE,EAAE,UAAU,CAAC,qBAAqB,CAAC,CAAC;YAChE,CAAC;YACD,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;oBACpD,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,QAAQ,CAAC;iBACxD,CAAC;gBACF,IAAI,CAAC,oBAAoB,CAAC,EAAC,SAAS,EAAE,cAAc,EAAC,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;IACH,CAAC;IAEO,oBAAoB,CAE1B,SAAoB,EACpB,EAAC,QAAQ,EAAE,MAAM,EAAqC;QAEtD,MAAM,cAAc,GAAI,IAAI,CAAC,KAAa,CAAC,cAAc,CAAC;QAC1D,MAAM,YAAY,GAAG,cAAc,EAAE,YAAoC,CAAC;QAC1E,MAAM,aAAa,GAAG,cAAc,EAAE,aAAmC,CAAC;QAC1E,MAAM,eAAe,GAAG,cAAc,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QAEzD,IACE,CAAC,YAAY;YACb,aAAa,KAAK,SAAS;YAC3B,OAAO,cAAc,EAAE,qBAAqB,KAAK,UAAU,EAC3D,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAC9F,CAAC;QAED,MAAM,UAAU,GAAI,IAAI,CAAC,KAAK,CAAC,IAAY,EAAE,UAAU,EAAE,OAAO,CAAC;QACjE,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC;QACpF,MAAM,qBAAqB,GAAG,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC9D,yFAAyF;QACzF,4FAA4F;QAC5F,yFAAyF;QACzF,MAAM,kBAAkB,GACtB,eAAe,IAAI,CAAC,CAAC,UAAU,IAAI,cAAc,CAAC,SAAS,IAAI,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChG,IAAI,CAAC,UAAU,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,kBAAkB,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC9F,MAAM,IAAI,KAAK,CACb,0FAA0F;gBACxF,6CAA6C,CAChD,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,SAAS,CAAC,KAAqB,CAAC;QAC/C,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE1D,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,MAAM,eAAe,GAAI,WAAmB,CAAC,iBAAiB,CAAC;YAC/D,UAAU,GAAG,UAAU,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9E,YAAY,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC;YACrF,YAAY,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;YAC1C,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC/B,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;YACnC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB;YAC7C,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB;YAC7C,oFAAoF;YACpF,iBAAiB,EAAE,IAAI,CAAC,aAAa;SACtC,CAAoB,CAAC;QACtB,MAAM,YAAY,GAAG,CAAC,WAAmB,EAAY,EAAE;YACrD,IAAI,kBAAkB,EAAE,CAAC;gBACvB,cAAc,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;gBACrD,cAAc,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzD,cAAc,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACN,MAAM,WAAW,GAAG,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;gBAC9D,cAAc,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;gBAC7C,cAAc,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;gBACjD,cAAc,CAAC,CAAC,CAAC,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1E,CAAC;YACD,OAAO,cAAc,CAAC;QACxB,CAAC,CAAC;QAEF,SAAS,CAAC,YAAY,GAAG,YAAY,CAAC;QACtC,KAAK,IAAI,GAAG,GAAG,QAAQ,EAAE,GAAG,GAAG,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;YAC9C,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,aAAa,EAAE,aAAa,CAAC,CAAC;YAC/E,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,GAAG,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC;YAE3D,MAAM,aAAa,GAAG,cAAc,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;YAEhE,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,eAAe,GAAG,CAAC,CAAC,CAAC;YACzB,IAAI,WAAW,GAAoC,IAAI,CAAC;YACxD,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;gBACzC,MAAM,WAAW,GAAG,YAAY,GAAG,UAAU,CAAC;gBAC9C,MAAM,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;gBAE5B,MAAM,KAAK,GACT,YAAY,KAAK,eAAe,GAAG,CAAC,IAAI,WAAW;oBACjD,CAAC,CAAC,WAAW;oBACb,CAAC,CAAC,2BAA2B,CAAC,IAAI,EAAE,YAAY,CAAC,YAAY,CAAC,EAAE,eAAe,CAAC,CAAC;gBACrF,MAAM,GAAG,GAAG,2BAA2B,CACrC,IAAI,EACJ,YAAY,CAAC,YAAY,GAAG,CAAC,CAAC,EAC9B,eAAe,CAChB,CAAC;gBACF,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC/B,eAAe,GAAG,YAAY,CAAC;gBAC/B,WAAW,GAAG,GAAG,CAAC;YACpB,CAAC;YAED,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;gBACnB,KAAK,IAAI,WAAW,GAAG,QAAQ,EAAE,WAAW,GAAG,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC;oBACrE,MAAM,CAAC,WAAW,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,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,EAAE,EAAC,UAAU,EAAE,KAAK,EAAC,CAAC,CAAC;YAEjD,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;;AAlVM,+BAAY,GAAG,YAAY,CAAC;AAC5B,gCAAa,GAAG,oBAAoB,CAAC;eAFzB,kBAAkB"}
@@ -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"}