@deck.gl-community/infovis-layers 9.3.5 → 9.3.7

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 (126) hide show
  1. package/dist/index.cjs +2998 -114
  2. package/dist/index.cjs.map +4 -4
  3. package/dist/index.d.ts +11 -2
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +9 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/layers/animation-layer/animation-layer.d.ts +30 -0
  8. package/dist/layers/animation-layer/animation-layer.d.ts.map +1 -0
  9. package/dist/layers/animation-layer/animation-layer.js +53 -0
  10. package/dist/layers/animation-layer/animation-layer.js.map +1 -0
  11. package/dist/layers/animation-layer/animation.d.ts +86 -0
  12. package/dist/layers/animation-layer/animation.d.ts.map +1 -0
  13. package/dist/layers/animation-layer/animation.js +214 -0
  14. package/dist/layers/animation-layer/animation.js.map +1 -0
  15. package/dist/layers/block-layer/block-layer-fragment.glsl.d.ts +3 -0
  16. package/dist/layers/block-layer/block-layer-fragment.glsl.d.ts.map +1 -0
  17. package/dist/layers/block-layer/block-layer-fragment.glsl.js +41 -0
  18. package/dist/layers/block-layer/block-layer-fragment.glsl.js.map +1 -0
  19. package/dist/layers/block-layer/block-layer-uniforms.d.ts +27 -0
  20. package/dist/layers/block-layer/block-layer-uniforms.d.ts.map +1 -0
  21. package/dist/layers/block-layer/block-layer-uniforms.js +26 -0
  22. package/dist/layers/block-layer/block-layer-uniforms.js.map +1 -0
  23. package/dist/layers/block-layer/block-layer-vertex.glsl.d.ts +3 -0
  24. package/dist/layers/block-layer/block-layer-vertex.glsl.d.ts.map +1 -0
  25. package/dist/layers/block-layer/block-layer-vertex.glsl.js +67 -0
  26. package/dist/layers/block-layer/block-layer-vertex.glsl.js.map +1 -0
  27. package/dist/layers/block-layer/block-layer.d.ts +71 -0
  28. package/dist/layers/block-layer/block-layer.d.ts.map +1 -0
  29. package/dist/layers/block-layer/block-layer.js +108 -0
  30. package/dist/layers/block-layer/block-layer.js.map +1 -0
  31. package/dist/layers/fast-text-layer/fast-text-layer.d.ts +148 -0
  32. package/dist/layers/fast-text-layer/fast-text-layer.d.ts.map +1 -0
  33. package/dist/layers/fast-text-layer/fast-text-layer.js +862 -0
  34. package/dist/layers/fast-text-layer/fast-text-layer.js.map +1 -0
  35. package/dist/layers/fast-text-layer/fast-text-layer.test.d.ts +2 -0
  36. package/dist/layers/fast-text-layer/fast-text-layer.test.d.ts.map +1 -0
  37. package/dist/layers/fast-text-layer/fast-text-layer.test.js +300 -0
  38. package/dist/layers/fast-text-layer/fast-text-layer.test.js.map +1 -0
  39. package/dist/layers/fast-text-layer/fast-text-layout.d.ts +179 -0
  40. package/dist/layers/fast-text-layer/fast-text-layout.d.ts.map +1 -0
  41. package/dist/layers/fast-text-layer/fast-text-layout.js +665 -0
  42. package/dist/layers/fast-text-layer/fast-text-layout.js.map +1 -0
  43. package/dist/layers/fast-text-layer/font-atlas.d.ts +98 -0
  44. package/dist/layers/fast-text-layer/font-atlas.d.ts.map +1 -0
  45. package/dist/layers/fast-text-layer/font-atlas.js +337 -0
  46. package/dist/layers/fast-text-layer/font-atlas.js.map +1 -0
  47. package/dist/layers/fast-text-layer/index.d.ts +4 -0
  48. package/dist/layers/fast-text-layer/index.d.ts.map +1 -0
  49. package/dist/layers/fast-text-layer/index.js +4 -0
  50. package/dist/layers/fast-text-layer/index.js.map +1 -0
  51. package/dist/layers/time-delta-layer.d.ts +22 -60
  52. package/dist/layers/time-delta-layer.d.ts.map +1 -1
  53. package/dist/layers/time-delta-layer.js +23 -45
  54. package/dist/layers/time-delta-layer.js.map +1 -1
  55. package/dist/synchronized-views/synchronized-views.js +1 -1
  56. package/dist/synchronized-views/synchronized-views.js.map +1 -1
  57. package/dist/utils/format-utils.d.ts +27 -3
  58. package/dist/utils/format-utils.d.ts.map +1 -1
  59. package/dist/utils/format-utils.js +72 -40
  60. package/dist/utils/format-utils.js.map +1 -1
  61. package/dist/utils/utf8-string-view.d.ts +53 -0
  62. package/dist/utils/utf8-string-view.d.ts.map +1 -0
  63. package/dist/utils/utf8-string-view.js +169 -0
  64. package/dist/utils/utf8-string-view.js.map +1 -0
  65. package/dist/utils/utf8-string-view.test.d.ts +2 -0
  66. package/dist/utils/utf8-string-view.test.d.ts.map +1 -0
  67. package/dist/utils/utf8-string-view.test.js +88 -0
  68. package/dist/utils/utf8-string-view.test.js.map +1 -0
  69. package/dist/views/bounds-utils.d.ts +23 -0
  70. package/dist/views/bounds-utils.d.ts.map +1 -0
  71. package/dist/views/bounds-utils.js +65 -0
  72. package/dist/views/bounds-utils.js.map +1 -0
  73. package/dist/views/layer-bounds-filter.d.ts +48 -0
  74. package/dist/views/layer-bounds-filter.d.ts.map +1 -0
  75. package/dist/views/layer-bounds-filter.js +99 -0
  76. package/dist/views/layer-bounds-filter.js.map +1 -0
  77. package/dist/views/orthographic-utils.d.ts +30 -2
  78. package/dist/views/orthographic-utils.d.ts.map +1 -1
  79. package/dist/views/orthographic-utils.js +33 -14
  80. package/dist/views/orthographic-utils.js.map +1 -1
  81. package/dist/views/view-layout/build-views-from-view-layout.d.ts +37 -0
  82. package/dist/views/view-layout/build-views-from-view-layout.d.ts.map +1 -0
  83. package/dist/views/view-layout/build-views-from-view-layout.js +413 -0
  84. package/dist/views/view-layout/build-views-from-view-layout.js.map +1 -0
  85. package/dist/views/view-layout/index.d.ts +3 -0
  86. package/dist/views/view-layout/index.d.ts.map +1 -0
  87. package/dist/views/view-layout/index.js +3 -0
  88. package/dist/views/view-layout/index.js.map +1 -0
  89. package/dist/views/view-layout/view-layout-item.d.ts +74 -0
  90. package/dist/views/view-layout/view-layout-item.d.ts.map +1 -0
  91. package/dist/views/view-layout/view-layout-item.js +48 -0
  92. package/dist/views/view-layout/view-layout-item.js.map +1 -0
  93. package/dist/views/view-layout/view-layout.test.d.ts +2 -0
  94. package/dist/views/view-layout/view-layout.test.d.ts.map +1 -0
  95. package/dist/views/view-layout/view-layout.test.js +112 -0
  96. package/dist/views/view-layout/view-layout.test.js.map +1 -0
  97. package/dist/views/viewport-bounds-utils.d.ts +55 -0
  98. package/dist/views/viewport-bounds-utils.d.ts.map +1 -0
  99. package/dist/views/viewport-bounds-utils.js +70 -0
  100. package/dist/views/viewport-bounds-utils.js.map +1 -0
  101. package/package.json +11 -4
  102. package/src/index.ts +91 -2
  103. package/src/layers/animation-layer/animation-layer.ts +92 -0
  104. package/src/layers/animation-layer/animation.ts +328 -0
  105. package/src/layers/block-layer/block-layer-fragment.glsl.ts +41 -0
  106. package/src/layers/block-layer/block-layer-uniforms.ts +43 -0
  107. package/src/layers/block-layer/block-layer-vertex.glsl.ts +67 -0
  108. package/src/layers/block-layer/block-layer.ts +199 -0
  109. package/src/layers/fast-text-layer/fast-text-layer.test.ts +359 -0
  110. package/src/layers/fast-text-layer/fast-text-layer.ts +1208 -0
  111. package/src/layers/fast-text-layer/fast-text-layout.ts +1124 -0
  112. package/src/layers/fast-text-layer/font-atlas.ts +574 -0
  113. package/src/layers/fast-text-layer/index.ts +37 -0
  114. package/src/layers/time-delta-layer.ts +47 -62
  115. package/src/synchronized-views/synchronized-views.ts +1 -1
  116. package/src/utils/format-utils.ts +90 -40
  117. package/src/utils/utf8-string-view.test.ts +119 -0
  118. package/src/utils/utf8-string-view.ts +273 -0
  119. package/src/views/bounds-utils.ts +88 -0
  120. package/src/views/layer-bounds-filter.ts +160 -0
  121. package/src/views/orthographic-utils.ts +65 -18
  122. package/src/views/view-layout/build-views-from-view-layout.ts +547 -0
  123. package/src/views/view-layout/index.ts +18 -0
  124. package/src/views/view-layout/view-layout-item.ts +125 -0
  125. package/src/views/view-layout/view-layout.test.ts +129 -0
  126. package/src/views/viewport-bounds-utils.ts +104 -0
@@ -0,0 +1,88 @@
1
+ import * as arrow from 'apache-arrow';
2
+ import { describe, expect, it } from 'vitest';
3
+ import { arrowFindUtf8, getArrowUtf8ColumnSource, getArrowUtf8RowView, getUtf8ColumnSourceRowView, makeUtf8StringView } from "./utf8-string-view.js";
4
+ describe('utf8-string-view', () => {
5
+ it('finds matching Utf8 rows without materializing a lookup map', () => {
6
+ const column = arrow.vectorFromArray(['alpha', null, '6149800612493239450'], new arrow.Utf8());
7
+ expect(arrowFindUtf8(column, makeUtf8StringView('alpha'))).toBe(0);
8
+ expect(arrowFindUtf8(column, makeUtf8StringView('6149800612493239450'))).toBe(2);
9
+ expect(arrowFindUtf8(column, makeUtf8StringView('alpha'), 1)).toBe(-1);
10
+ expect(arrowFindUtf8(column, makeUtf8StringView('missing'))).toBe(-1);
11
+ });
12
+ it('finds exact UTF-8 strings in Arrow columns', () => {
13
+ const column = buildArrowUtf8Vector([
14
+ 'span-a',
15
+ '6149800612493239450',
16
+ 'span-b',
17
+ '6149800612493239450'
18
+ ]);
19
+ const view = makeUtf8StringView('6149800612493239450');
20
+ expect(arrowFindUtf8(column, view)).toBe(1);
21
+ expect(arrowFindUtf8(column, view, 2)).toBe(3);
22
+ expect(arrowFindUtf8(column, view, 4)).toBe(-1);
23
+ });
24
+ it('falls back safely for nullable Arrow string columns', () => {
25
+ const column = arrow.vectorFromArray(['span-a', null, 'span-c'], new arrow.Utf8());
26
+ expect(arrowFindUtf8(column, makeUtf8StringView('span-c'))).toBe(2);
27
+ expect(arrowFindUtf8(column, makeUtf8StringView('missing'))).toBe(-1);
28
+ });
29
+ it('fills a reusable row view for direct Utf8 values', () => {
30
+ const column = buildArrowUtf8Vector(['alpha', '', 'gamma']);
31
+ const out = makeEmptyUtf8View();
32
+ expect(getArrowUtf8RowView(column, 0, out)).toBe(true);
33
+ expect(readUtf8ViewBytes(out)).toEqual([97, 108, 112, 104, 97]);
34
+ expect(getArrowUtf8RowView(column, 1, out)).toBe(true);
35
+ expect(readUtf8ViewBytes(out)).toEqual([]);
36
+ expect(getArrowUtf8RowView(column, 3, out)).toBe(false);
37
+ });
38
+ it('fills a reusable row view for nullable Utf8 values', () => {
39
+ const column = arrow.vectorFromArray(['span-a', null, 'span-c'], new arrow.Utf8());
40
+ const out = makeEmptyUtf8View();
41
+ expect(getArrowUtf8RowView(column, 1, out)).toBe(false);
42
+ expect(getArrowUtf8RowView(column, 2, out)).toBe(true);
43
+ expect(readUtf8ViewBytes(out)).toEqual([115, 112, 97, 110, 45, 99]);
44
+ });
45
+ it('fills a reusable row view for sliced Utf8 values', () => {
46
+ const column = buildArrowUtf8Vector(['skip', 'first', 'second']).slice(1, 3);
47
+ const out = makeEmptyUtf8View();
48
+ expect(getArrowUtf8RowView(column, 0, out)).toBe(true);
49
+ expect(readUtf8ViewBytes(out)).toEqual([102, 105, 114, 115, 116]);
50
+ expect(getArrowUtf8RowView(column, 1, out)).toBe(true);
51
+ expect(readUtf8ViewBytes(out)).toEqual([115, 101, 99, 111, 110, 100]);
52
+ expect(arrowFindUtf8(column, makeUtf8StringView('second'))).toBe(1);
53
+ });
54
+ it('fills normalized column source row views for sliced Utf8 values', () => {
55
+ const column = buildArrowUtf8Vector(['skip', 'first', 'second']).slice(1, 3);
56
+ const source = getArrowUtf8ColumnSource(column);
57
+ const out = makeEmptyUtf8View();
58
+ expect(source).not.toBeNull();
59
+ expect(getUtf8ColumnSourceRowView(source, 0, out)).toBe(true);
60
+ expect(readUtf8ViewBytes(out)).toEqual([102, 105, 114, 115, 116]);
61
+ expect(getUtf8ColumnSourceRowView(source, 1, out)).toBe(true);
62
+ expect(readUtf8ViewBytes(out)).toEqual([115, 101, 99, 111, 110, 100]);
63
+ });
64
+ it('fills a reusable row view for chunked Utf8 values', () => {
65
+ const leftTable = new arrow.Table({
66
+ name: arrow.vectorFromArray(['left'], new arrow.Utf8())
67
+ });
68
+ const rightTable = new arrow.Table({
69
+ name: arrow.vectorFromArray(['right', 'last'], new arrow.Utf8())
70
+ });
71
+ const column = leftTable.concat(rightTable).getChild('name');
72
+ const out = makeEmptyUtf8View();
73
+ expect(getArrowUtf8RowView(column, 0, out)).toBe(true);
74
+ expect(readUtf8ViewBytes(out)).toEqual([108, 101, 102, 116]);
75
+ expect(getArrowUtf8RowView(column, 2, out)).toBe(true);
76
+ expect(readUtf8ViewBytes(out)).toEqual([108, 97, 115, 116]);
77
+ });
78
+ });
79
+ function makeEmptyUtf8View() {
80
+ return { data: new Uint8Array(), start: 0, end: 0 };
81
+ }
82
+ function readUtf8ViewBytes(view) {
83
+ return Array.from(view.data.subarray(view.start, view.end));
84
+ }
85
+ function buildArrowUtf8Vector(values) {
86
+ return arrow.vectorFromArray(values, new arrow.Utf8());
87
+ }
88
+ //# sourceMappingURL=utf8-string-view.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utf8-string-view.test.js","sourceRoot":"","sources":["../../src/utils/utf8-string-view.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /** Two-dimensional world-space bounds represented by minimum and maximum corners. */
2
+ export type Bounds = [[number, number], [number, number]];
3
+ /** Interleaved X/Y block geometry values accepted by {@link getPaddedBlockBounds}. */
4
+ export type Geometry = ArrayLike<number> | null | undefined;
5
+ /** Padding configuration for {@link getPaddedBlockBounds}. */
6
+ export type PaddedBlockBoundsOptions = {
7
+ /** Padding added as a fraction of geometry width and height. @defaultValue 0.1 */
8
+ paddingFraction?: number;
9
+ /** Minimum world-space padding added on each axis. @defaultValue 1 */
10
+ minimumPadding?: number;
11
+ };
12
+ /**
13
+ * Computes padded bounds for a block geometry represented as an interleaved array of X/Y
14
+ * coordinates.
15
+ *
16
+ * @param geometry - The geometry describing the block perimeter, or `null`/`undefined` when the
17
+ * block has not been rendered.
18
+ * @param options - Optional padding configuration. When omitted, a small percentage padding is
19
+ * applied so that the block does not touch the viewport edges.
20
+ * @returns The padded bounds for the geometry or `null` if the input does not contain any points.
21
+ */
22
+ export declare function getPaddedBlockBounds(geometry: Geometry, options?: PaddedBlockBoundsOptions): Bounds | null;
23
+ //# sourceMappingURL=bounds-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bounds-utils.d.ts","sourceRoot":"","sources":["../../src/views/bounds-utils.ts"],"names":[],"mappings":"AAIA,qFAAqF;AACrF,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAC1D,sFAAsF;AACtF,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;AAE5D,8DAA8D;AAC9D,MAAM,MAAM,wBAAwB,GAAG;IACrC,kFAAkF;IAClF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sEAAsE;IACtE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,wBAAwB,GACjC,MAAM,GAAG,IAAI,CASf"}
@@ -0,0 +1,65 @@
1
+ // deck.gl-community
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ /**
5
+ * Computes padded bounds for a block geometry represented as an interleaved array of X/Y
6
+ * coordinates.
7
+ *
8
+ * @param geometry - The geometry describing the block perimeter, or `null`/`undefined` when the
9
+ * block has not been rendered.
10
+ * @param options - Optional padding configuration. When omitted, a small percentage padding is
11
+ * applied so that the block does not touch the viewport edges.
12
+ * @returns The padded bounds for the geometry or `null` if the input does not contain any points.
13
+ */
14
+ export function getPaddedBlockBounds(geometry, options) {
15
+ const bounds = getGeometryBounds(geometry);
16
+ if (!bounds) {
17
+ return null;
18
+ }
19
+ const paddingFraction = options?.paddingFraction ?? 0.1;
20
+ const minimumPadding = options?.minimumPadding ?? 1;
21
+ return padBounds(bounds, paddingFraction, minimumPadding);
22
+ }
23
+ function getGeometryBounds(geometry) {
24
+ if (!geometry || geometry.length < 2) {
25
+ return null;
26
+ }
27
+ let minX = Infinity;
28
+ let minY = Infinity;
29
+ let maxX = -Infinity;
30
+ let maxY = -Infinity;
31
+ for (let index = 0; index < geometry.length; index += 2) {
32
+ const x = geometry[index];
33
+ const y = geometry[index + 1];
34
+ if (x < minX)
35
+ minX = x;
36
+ if (y < minY)
37
+ minY = y;
38
+ if (x > maxX)
39
+ maxX = x;
40
+ if (y > maxY)
41
+ maxY = y;
42
+ }
43
+ if (!Number.isFinite(minX) ||
44
+ !Number.isFinite(minY) ||
45
+ !Number.isFinite(maxX) ||
46
+ !Number.isFinite(maxY)) {
47
+ return null;
48
+ }
49
+ return [
50
+ [minX, minY],
51
+ [maxX, maxY]
52
+ ];
53
+ }
54
+ function padBounds(bounds, paddingFraction, minimumPadding) {
55
+ const [[minX, minY], [maxX, maxY]] = bounds;
56
+ const width = maxX - minX;
57
+ const height = maxY - minY;
58
+ const paddingX = Math.max(width * paddingFraction, minimumPadding);
59
+ const paddingY = Math.max(height * paddingFraction, minimumPadding);
60
+ return [
61
+ [minX - paddingX, minY - paddingY],
62
+ [maxX + paddingX, maxY + paddingY]
63
+ ];
64
+ }
65
+ //# sourceMappingURL=bounds-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bounds-utils.js","sourceRoot":"","sources":["../../src/views/bounds-utils.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;AAepC;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAkB,EAClB,OAAkC;IAElC,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,eAAe,GAAG,OAAO,EAAE,eAAe,IAAI,GAAG,CAAC;IACxD,MAAM,cAAc,GAAG,OAAO,EAAE,cAAc,IAAI,CAAC,CAAC;IACpD,OAAO,SAAS,CAAC,MAAM,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAkB;IAC3C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC;IACrB,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC;IAErB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC;QAE/B,IAAI,CAAC,GAAG,IAAI;YAAE,IAAI,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,GAAG,IAAI;YAAE,IAAI,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,GAAG,IAAI;YAAE,IAAI,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,GAAG,IAAI;YAAE,IAAI,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EACtB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,CAAC,IAAI,EAAE,IAAI,CAAC;QACZ,CAAC,IAAI,EAAE,IAAI,CAAC;KACb,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,MAAc,EAAE,eAAuB,EAAE,cAAsB;IAChF,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,eAAe,EAAE,cAAc,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,eAAe,EAAE,cAAc,CAAC,CAAC;IAEpE,OAAO;QACL,CAAC,IAAI,GAAG,QAAQ,EAAE,IAAI,GAAG,QAAQ,CAAC;QAClC,CAAC,IAAI,GAAG,QAAQ,EAAE,IAAI,GAAG,QAAQ,CAAC;KACnC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,48 @@
1
+ import type { FilterContext } from '@deck.gl/core';
2
+ /** Deck.gl layer filter callback or `null` when no filter should be applied. */
3
+ export type LayerFilter = ((context: FilterContext) => boolean) | null;
4
+ /** Flat two-dimensional bounds represented as `[minX, minY, maxX, maxY]`. */
5
+ export type Bounds = [number, number, number, number];
6
+ /** Reason emitted when the viewport bounds filter makes or skips a filter decision. */
7
+ export type LayerBoundsFilterDecision = {
8
+ /** Indicates that the layer was filtered because it missed the viewport. */
9
+ decision: 'filter';
10
+ /** Deck.gl filter context evaluated by the filter. */
11
+ context: FilterContext;
12
+ /** Layer bounds evaluated by the filter. */
13
+ layerBounds: Bounds;
14
+ /** Viewport bounds evaluated by the filter. */
15
+ viewportBounds: Bounds;
16
+ } | {
17
+ /** Indicates that the layer did not expose usable bounds. */
18
+ decision: 'missing-layer-bounds';
19
+ /** Deck.gl filter context evaluated by the filter. */
20
+ context: FilterContext;
21
+ } | {
22
+ /** Indicates that the viewport did not expose usable bounds. */
23
+ decision: 'missing-viewport-bounds';
24
+ /** Deck.gl filter context evaluated by the filter. */
25
+ context: FilterContext;
26
+ /** Layer bounds evaluated before viewport bounds were found missing. */
27
+ layerBounds: Bounds;
28
+ };
29
+ /** Configuration for {@link createViewportBoundsFilter}. */
30
+ export type LayerBoundsFilterOptions = {
31
+ /** Callback invoked when the filter skips or applies a bounds decision. */
32
+ onDecision?: (decision: LayerBoundsFilterDecision) => void;
33
+ };
34
+ /**
35
+ * Combine multiple layer filters.
36
+ * Returns null when none of the supplied filters are defined.
37
+ * @param filters - Layer filters to evaluate in order.
38
+ * @returns One filter that requires every defined filter to pass, or `null`.
39
+ */
40
+ export declare function combineLayerFilters(filters: (LayerFilter | undefined | null)[]): LayerFilter;
41
+ /**
42
+ * Creates a layer filter that compares layer and viewport bounds.
43
+ * Layers that do not intersect the viewport bounds are filtered out.
44
+ * @param options - Optional decision callback configuration.
45
+ * @returns Layer filter that keeps only layers intersecting the current viewport.
46
+ */
47
+ export declare function createViewportBoundsFilter(options?: LayerBoundsFilterOptions): LayerFilter;
48
+ //# sourceMappingURL=layer-bounds-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layer-bounds-filter.d.ts","sourceRoot":"","sources":["../../src/views/layer-bounds-filter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,aAAa,EAAkB,MAAM,eAAe,CAAC;AAElE,gFAAgF;AAChF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,GAAG,IAAI,CAAC;AAEvE,6EAA6E;AAC7E,MAAM,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEtD,uFAAuF;AACvF,MAAM,MAAM,yBAAyB,GACjC;IACE,4EAA4E;IAC5E,QAAQ,EAAE,QAAQ,CAAC;IACnB,sDAAsD;IACtD,OAAO,EAAE,aAAa,CAAC;IACvB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;CACxB,GACD;IACE,6DAA6D;IAC7D,QAAQ,EAAE,sBAAsB,CAAC;IACjC,sDAAsD;IACtD,OAAO,EAAE,aAAa,CAAC;CACxB,GACD;IACE,gEAAgE;IAChE,QAAQ,EAAE,yBAAyB,CAAC;IACpC,sDAAsD;IACtD,OAAO,EAAE,aAAa,CAAC;IACvB,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEN,4DAA4D;AAC5D,MAAM,MAAM,wBAAwB,GAAG;IACrC,2EAA2E;IAC3E,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,yBAAyB,KAAK,IAAI,CAAC;CAC5D,CAAC;AAIF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,CAAC,WAAW,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,GAAG,WAAW,CAS5F;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,WAAW,CAiC1F"}
@@ -0,0 +1,99 @@
1
+ // deck.gl-community
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ /**
5
+ * Combine multiple layer filters.
6
+ * Returns null when none of the supplied filters are defined.
7
+ * @param filters - Layer filters to evaluate in order.
8
+ * @returns One filter that requires every defined filter to pass, or `null`.
9
+ */
10
+ export function combineLayerFilters(filters) {
11
+ const definedFilters = filters.filter(Boolean);
12
+ if (!definedFilters.length) {
13
+ return null;
14
+ }
15
+ if (definedFilters.length === 1) {
16
+ return definedFilters[0];
17
+ }
18
+ return context => definedFilters.every(filter => filter(context));
19
+ }
20
+ /**
21
+ * Creates a layer filter that compares layer and viewport bounds.
22
+ * Layers that do not intersect the viewport bounds are filtered out.
23
+ * @param options - Optional decision callback configuration.
24
+ * @returns Layer filter that keeps only layers intersecting the current viewport.
25
+ */
26
+ export function createViewportBoundsFilter(options) {
27
+ const layerBoundsCache = new WeakMap();
28
+ const viewportBoundsCache = new WeakMap();
29
+ return (context) => {
30
+ const { layer, viewport } = context;
31
+ let layerBounds = layerBoundsCache.get(layer);
32
+ if (layerBounds === undefined) {
33
+ layerBounds = getLayerBounds(layer);
34
+ layerBoundsCache.set(layer, layerBounds);
35
+ }
36
+ if (!layerBounds) {
37
+ options?.onDecision?.({ decision: 'missing-layer-bounds', context });
38
+ return true;
39
+ }
40
+ let viewportBounds = viewportBoundsCache.get(viewport);
41
+ if (viewportBounds === undefined) {
42
+ viewportBounds = getViewportBounds(viewport);
43
+ viewportBoundsCache.set(viewport, viewportBounds);
44
+ }
45
+ if (!viewportBounds) {
46
+ options?.onDecision?.({ decision: 'missing-viewport-bounds', context, layerBounds });
47
+ return true;
48
+ }
49
+ const shouldRender = boundsOverlap(layerBounds, viewportBounds);
50
+ if (!shouldRender) {
51
+ options?.onDecision?.({ decision: 'filter', context, layerBounds, viewportBounds });
52
+ }
53
+ return shouldRender;
54
+ };
55
+ }
56
+ function getLayerBounds(layer) {
57
+ const bounds = layer.getBounds();
58
+ if (!bounds || bounds.length < 2) {
59
+ return null;
60
+ }
61
+ return normalizeBounds(bounds[0], bounds[1]);
62
+ }
63
+ function getViewportBounds(viewport) {
64
+ const bounds = viewport.getBounds();
65
+ if (!bounds || bounds.length < 4) {
66
+ return null;
67
+ }
68
+ const [minX, minY, maxX, maxY] = bounds;
69
+ if (!isFiniteNumber(minX) ||
70
+ !isFiniteNumber(minY) ||
71
+ !isFiniteNumber(maxX) ||
72
+ !isFiniteNumber(maxY)) {
73
+ return null;
74
+ }
75
+ return normalizeBounds([minX, minY], [maxX, maxY]);
76
+ }
77
+ function normalizeBounds(min, max) {
78
+ if (!min || !max || min.length < 2 || max.length < 2) {
79
+ return null;
80
+ }
81
+ const minX = Math.min(min[0], max[0]);
82
+ const minY = Math.min(min[1], max[1]);
83
+ const maxX = Math.max(min[0], max[0]);
84
+ const maxY = Math.max(min[1], max[1]);
85
+ if (!isFiniteNumber(minX) ||
86
+ !isFiniteNumber(minY) ||
87
+ !isFiniteNumber(maxX) ||
88
+ !isFiniteNumber(maxY)) {
89
+ return null;
90
+ }
91
+ return [minX, minY, maxX, maxY];
92
+ }
93
+ function boundsOverlap(a, b) {
94
+ return !(a[2] < b[0] || b[2] < a[0] || a[3] < b[1] || b[3] < a[1]);
95
+ }
96
+ function isFiniteNumber(value) {
97
+ return Number.isFinite(value);
98
+ }
99
+ //# sourceMappingURL=layer-bounds-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layer-bounds-filter.js","sourceRoot":"","sources":["../../src/views/layer-bounds-filter.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,39 @@
1
- type Bounds = [[number, number], [number, number]];
1
+ import type { Bounds } from "./bounds-utils.js";
2
+ /**
3
+ * Fits two-dimensional bounds into an orthographic viewport using one shared zoom value.
4
+ * @param width - Viewport width in pixels.
5
+ * @param height - Viewport height in pixels.
6
+ * @param bounds - World-space bounds to fit.
7
+ * @param zoomMode - Shared-zoom mode selector.
8
+ * @returns View target and shared/per-axis zoom values.
9
+ */
2
10
  export declare function fitBoundsOrthographic(width: number, height: number, bounds: Readonly<Bounds>, zoomMode: 'single'): {
3
11
  target: [number, number];
4
12
  zoom: number;
13
+ zoomX: number;
14
+ zoomY: number;
5
15
  };
16
+ /**
17
+ * Fits two-dimensional bounds into an orthographic viewport using one zoom per axis.
18
+ * @param width - Viewport width in pixels.
19
+ * @param height - Viewport height in pixels.
20
+ * @param bounds - World-space bounds to fit.
21
+ * @param zoomMode - Per-axis zoom mode selector.
22
+ * @returns View target and per-axis zoom values.
23
+ */
6
24
  export declare function fitBoundsOrthographic(width: number, height: number, bounds: Readonly<Bounds>, zoomMode: 'per-axis'): {
7
25
  target: [number, number];
8
26
  zoom: [number, number];
27
+ zoomX: number;
28
+ zoomY: number;
9
29
  };
10
- export {};
30
+ /**
31
+ * Computes world-space bounds covered by an orthographic viewport.
32
+ * @param width - Viewport width in pixels.
33
+ * @param height - Viewport height in pixels.
34
+ * @param zoom - Deck.gl orthographic zoom level, as one value or `[zoomX, zoomY]`.
35
+ * @param target - Deck.gl orthographic target `[centerX, centerY]`.
36
+ * @returns World-space bounds covered by the viewport.
37
+ */
38
+ export declare function getBoundsOrthographic(width: number, height: number, zoom: number | [number, number], target: [number, number]): Bounds;
11
39
  //# sourceMappingURL=orthographic-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"orthographic-utils.d.ts","sourceRoot":"","sources":["../../src/views/orthographic-utils.ts"],"names":[],"mappings":"AAIA,KAAK,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAEnD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EACxB,QAAQ,EAAE,QAAQ,GACjB;IAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,CAAC;AAE5C,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EACxB,QAAQ,EAAE,UAAU,GACnB;IAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAC,CAAC"}
1
+ {"version":3,"file":"orthographic-utils.d.ts","sourceRoot":"","sources":["../../src/views/orthographic-utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,MAAM,EAAC,0BAAuB;AAE3C;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EACxB,QAAQ,EAAE,QAAQ,GACjB;IAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAAC;AAE1E;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EACxB,QAAQ,EAAE,UAAU,GACnB;IAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAAC;AA0DpF;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GACvB,MAAM,CAWR"}
@@ -2,14 +2,12 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
  /**
5
- * Compute center & zoom for an OrthographicViewport so that `bounds` fills the viewport.
6
- * @param width viewport width in px
7
- * @param height viewport height in px
8
- * @param bounds [[minX,minY],[maxX,maxY]] in the same world units you’re rendering
9
- * @returns { target: [number, number], zoom: number }
10
- * target: center of the viewport in world units
11
- * zoom: deck.gl orthographic zoom level (log2(scale))
12
- * (deck.gl orthographic zoom is the log2 of the scale factor)
5
+ * Fits two-dimensional bounds into an orthographic viewport.
6
+ * @param width - Viewport width in pixels.
7
+ * @param height - Viewport height in pixels.
8
+ * @param bounds - World-space bounds to fit.
9
+ * @param zoomMode - Whether to use one shared zoom or one zoom per axis.
10
+ * @returns View target plus deck.gl orthographic zoom values.
13
11
  */
14
12
  export function fitBoundsOrthographic(width, height, bounds, zoomMode = 'per-axis') {
15
13
  const [[minX, minY], [maxX, maxY]] = bounds;
@@ -17,11 +15,11 @@ export function fitBoundsOrthographic(width, height, bounds, zoomMode = 'per-axi
17
15
  const centerX = (minX + maxX) / 2;
18
16
  const centerY = (minY + maxY) / 2;
19
17
  // size of the box
20
- const boxW = maxX - minX;
21
- const boxH = maxY - minY;
18
+ const boxW = Math.max(0, maxX - minX);
19
+ const boxH = Math.max(0, maxY - minY);
22
20
  // scale (world units → screen pixels)
23
- const scaleX = width / boxW;
24
- const scaleY = height / boxH;
21
+ const scaleX = boxW ? Math.max(1, width) / boxW : 1;
22
+ const scaleY = boxH ? Math.max(1, height) / boxH : 1;
25
23
  // pick the smaller scale so the whole box fits
26
24
  const scale = Math.min(scaleX, scaleY);
27
25
  // deck.gl orthographic zoom is log2(scale)
@@ -29,13 +27,34 @@ export function fitBoundsOrthographic(width, height, bounds, zoomMode = 'per-axi
29
27
  // 3) axis‐specific zooms (deck.gl’s orthographic zoom = log2(scale))
30
28
  const zoomX = Math.log2(scaleX);
31
29
  const zoomY = Math.log2(scaleY);
32
- if (Number.isNaN(zoom) || Number.isNaN(zoomX) || Number.isNaN(zoom)) {
30
+ if (Number.isNaN(zoom) || Number.isNaN(zoomX) || Number.isNaN(zoomY)) {
33
31
  // eslint-disable-next-line no-console
34
32
  console.warn('Invalid zoom values:', { zoom, zoomX, zoomY });
35
33
  }
36
34
  return {
37
35
  target: [centerX, centerY],
38
- zoom: zoomMode === 'single' ? zoom : [zoomX, zoomY]
36
+ zoom: zoomMode === 'single' ? zoom : [zoomX, zoomY],
37
+ zoomX: zoomMode === 'single' ? zoom : zoomX,
38
+ zoomY: zoomMode === 'single' ? zoom : zoomY
39
39
  };
40
40
  }
41
+ /**
42
+ * Computes world-space bounds covered by an orthographic viewport.
43
+ * @param width - Viewport width in pixels.
44
+ * @param height - Viewport height in pixels.
45
+ * @param zoom - Deck.gl orthographic zoom level, as one value or `[zoomX, zoomY]`.
46
+ * @param target - Deck.gl orthographic target `[centerX, centerY]`.
47
+ * @returns World-space bounds covered by the viewport.
48
+ */
49
+ export function getBoundsOrthographic(width, height, zoom, target) {
50
+ const [centerX, centerY] = target;
51
+ const scaleX = Array.isArray(zoom) ? 2 ** zoom[0] : 2 ** zoom;
52
+ const scaleY = Array.isArray(zoom) ? 2 ** zoom[1] : 2 ** zoom;
53
+ const worldW = width / scaleX;
54
+ const worldH = height / scaleY;
55
+ return [
56
+ [centerX - worldW / 2, centerY - worldH / 2],
57
+ [centerX + worldW / 2, centerY + worldH / 2]
58
+ ];
59
+ }
41
60
  //# sourceMappingURL=orthographic-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"orthographic-utils.js","sourceRoot":"","sources":["../../src/views/orthographic-utils.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;AAkBpC;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAa,EACb,MAAc,EACd,MAAwB,EACxB,WAAkC,UAAU;IAE5C,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;IAE5C,oBAAoB;IACpB,MAAM,OAAO,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAElC,kBAAkB;IAClB,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAEzB,sCAAsC;IACtC,MAAM,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAE7B,+CAA+C;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEvC,2CAA2C;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE9B,qEAAqE;IACrE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpE,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAC,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO;QACL,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;QAC1B,IAAI,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC;KACpD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"orthographic-utils.js","sourceRoot":"","sources":["../../src/views/orthographic-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { View } from '@deck.gl/core';
2
+ import { ViewLayoutItem } from "./view-layout-item.js";
3
+ /** Rectangle resolved by the layout compiler for one view id. */
4
+ export type ViewLayoutRect = {
5
+ /** Left coordinate in deck pixels. */
6
+ x: number;
7
+ /** Top coordinate in deck pixels. */
8
+ y: number;
9
+ /** Width in deck pixels. */
10
+ width: number;
11
+ /** Height in deck pixels. */
12
+ height: number;
13
+ };
14
+ /** Concrete views plus resolved rectangles produced by `buildViewsFromViewLayout`. */
15
+ export type CompiledDeckViews = {
16
+ /** Concrete deck.gl views with numeric bounds resolved for the current canvas size. */
17
+ views: View[];
18
+ /** Resolved rectangles keyed by deck view id. */
19
+ rectsById: Record<string, ViewLayoutRect>;
20
+ };
21
+ /**
22
+ * Compiles one `ViewLayoutItem` tree into concrete deck.gl views and resolved rectangles.
23
+ *
24
+ * @param args - Root layout plus the current canvas size and optional previous compilation.
25
+ * @returns Concrete views with numeric bounds plus resolved rectangles keyed by view id.
26
+ */
27
+ export declare function buildViewsFromViewLayout(args: {
28
+ /** Root layout tree to compile. */
29
+ layout: ViewLayoutItem;
30
+ /** Current deck width in pixels. */
31
+ width: number;
32
+ /** Current deck height in pixels. */
33
+ height: number;
34
+ /** Optional previous compilation used for structural view reuse. */
35
+ previous?: CompiledDeckViews;
36
+ }): CompiledDeckViews;
37
+ //# sourceMappingURL=build-views-from-view-layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-views-from-view-layout.d.ts","sourceRoot":"","sources":["../../../src/views/view-layout/build-views-from-view-layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,eAAe,CAAC;AAEnC,OAAO,EAAC,cAAc,EAAC,8BAA2B;AAIlD,iEAAiE;AACjE,MAAM,MAAM,cAAc,GAAG;IAC3B,sCAAsC;IACtC,CAAC,EAAE,MAAM,CAAC;IACV,qCAAqC;IACrC,CAAC,EAAE,MAAM,CAAC;IACV,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,sFAAsF;AACtF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,uFAAuF;IACvF,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC3C,CAAC;AAgBF;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,mCAAmC;IACnC,MAAM,EAAE,cAAc,CAAC;IACvB,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B,GAAG,iBAAiB,CA2BpB"}