@deck.gl/react 8.8.0-alpha.4 → 8.8.0-beta.1

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 (59) hide show
  1. package/dist/es5/deckgl.js +29 -26
  2. package/dist/es5/deckgl.js.map +1 -1
  3. package/dist/es5/index.js.map +1 -1
  4. package/dist/es5/utils/evaluate-children.js +19 -12
  5. package/dist/es5/utils/evaluate-children.js.map +1 -1
  6. package/dist/es5/utils/extract-jsx-layers.js +20 -17
  7. package/dist/es5/utils/extract-jsx-layers.js.map +1 -1
  8. package/dist/es5/utils/extract-styles.js.map +1 -1
  9. package/dist/es5/utils/inherits-from.js.map +1 -1
  10. package/dist/es5/utils/position-children-under-views.js +8 -2
  11. package/dist/es5/utils/position-children-under-views.js.map +1 -1
  12. package/dist/es5/utils/use-isomorphic-layout-effect.js.map +1 -1
  13. package/dist/esm/deckgl.js +26 -18
  14. package/dist/esm/deckgl.js.map +1 -1
  15. package/dist/esm/index.js.map +1 -1
  16. package/dist/esm/utils/evaluate-children.js +13 -12
  17. package/dist/esm/utils/evaluate-children.js.map +1 -1
  18. package/dist/esm/utils/extract-jsx-layers.js +16 -14
  19. package/dist/esm/utils/extract-jsx-layers.js.map +1 -1
  20. package/dist/esm/utils/extract-styles.js.map +1 -1
  21. package/dist/esm/utils/inherits-from.js.map +1 -1
  22. package/dist/esm/utils/position-children-under-views.js +2 -2
  23. package/dist/esm/utils/position-children-under-views.js.map +1 -1
  24. package/dist/esm/utils/use-isomorphic-layout-effect.js.map +1 -1
  25. package/package.json +5 -6
  26. package/src/{deckgl.js → deckgl.ts} +65 -28
  27. package/src/index.ts +26 -0
  28. package/src/utils/evaluate-children.ts +47 -0
  29. package/src/utils/{extract-jsx-layers.js → extract-jsx-layers.ts} +36 -17
  30. package/src/utils/{extract-styles.js → extract-styles.ts} +16 -3
  31. package/src/utils/{inherits-from.js → inherits-from.ts} +1 -1
  32. package/src/utils/{position-children-under-views.js → position-children-under-views.ts} +36 -7
  33. package/src/utils/{use-isomorphic-layout-effect.js → use-isomorphic-layout-effect.ts} +0 -0
  34. package/typed/deckgl.d.ts +25 -0
  35. package/typed/deckgl.d.ts.map +1 -0
  36. package/typed/deckgl.js +194 -0
  37. package/typed/index.d.ts +5 -0
  38. package/typed/index.d.ts.map +1 -0
  39. package/{src → typed}/index.js +2 -3
  40. package/typed/package.json +6 -0
  41. package/typed/utils/evaluate-children.d.ts +4 -0
  42. package/typed/utils/evaluate-children.d.ts.map +1 -0
  43. package/typed/utils/evaluate-children.js +33 -0
  44. package/typed/utils/extract-jsx-layers.d.ts +13 -0
  45. package/typed/utils/extract-jsx-layers.d.ts.map +1 -0
  46. package/typed/utils/extract-jsx-layers.js +77 -0
  47. package/typed/utils/extract-styles.d.ts +10 -0
  48. package/typed/utils/extract-styles.d.ts.map +1 -0
  49. package/typed/utils/extract-styles.js +32 -0
  50. package/typed/utils/inherits-from.d.ts +2 -0
  51. package/typed/utils/inherits-from.d.ts.map +1 -0
  52. package/typed/utils/inherits-from.js +10 -0
  53. package/typed/utils/position-children-under-views.d.ts +15 -0
  54. package/typed/utils/position-children-under-views.d.ts.map +1 -0
  55. package/typed/utils/position-children-under-views.js +75 -0
  56. package/typed/utils/use-isomorphic-layout-effect.d.ts +4 -0
  57. package/typed/utils/use-isomorphic-layout-effect.d.ts.map +1 -0
  58. package/typed/utils/use-isomorphic-layout-effect.js +5 -0
  59. package/src/utils/evaluate-children.js +0 -38
@@ -17,7 +17,7 @@
17
17
  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
18
  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
19
  // THE SOFTWARE.
20
-
20
+ import * as React from 'react';
21
21
  import {
22
22
  createElement,
23
23
  useRef,
@@ -27,7 +27,6 @@ import {
27
27
  useImperativeHandle,
28
28
  forwardRef
29
29
  } from 'react';
30
- import PropTypes from 'prop-types';
31
30
  import {Deck} from '@deck.gl/core';
32
31
  import useIsomorphicLayoutEffect from './utils/use-isomorphic-layout-effect';
33
32
 
@@ -35,29 +34,62 @@ import extractJSXLayers from './utils/extract-jsx-layers';
35
34
  import positionChildrenUnderViews from './utils/position-children-under-views';
36
35
  import extractStyles from './utils/extract-styles';
37
36
 
37
+ import type {DeckGLContextValue} from './utils/position-children-under-views';
38
+ import type {DeckProps, Viewport} from '@deck.gl/core';
39
+
38
40
  /* eslint-disable max-statements, accessor-pairs */
41
+ type DeckInstanceRef = {
42
+ deck?: Deck;
43
+ redrawReason?: string | null;
44
+ lastRenderedViewports?: Viewport[];
45
+ viewStateUpdateRequested?: any;
46
+ interactionStateUpdateRequested?: any;
47
+ forceUpdate: () => void;
48
+ version: number;
49
+ control: React.ReactHTMLElement<HTMLElement> | null;
50
+ };
51
+
52
+ // Remove prop types in the base Deck class that support externally supplied canvas/WebGLContext
53
+ /** DeckGL React component props */
54
+ export type DeckGLProps = Omit<
55
+ DeckProps,
56
+ 'width' | 'height' | 'gl' | 'parent' | 'canvas' | '_customRender'
57
+ > & {
58
+ width?: string | number;
59
+ height?: string | number;
60
+ children?: React.ReactNode;
61
+ ContextProvider?: React.Context<DeckGLContextValue>['Provider'];
62
+ };
39
63
 
40
- function getRefHandles(thisRef) {
41
- const handles = {
42
- pickObject: opts => thisRef.deck.pickObject(opts),
43
- pickMultipleObjects: opts => thisRef.deck.pickMultipleObjects(opts),
44
- pickObjects: opts => thisRef.deck.pickObjects(opts)
64
+ export type DeckGLRef = {
65
+ deck?: Deck;
66
+ pickObject: Deck['pickObject'];
67
+ pickObjects: Deck['pickObjects'];
68
+ pickMultipleObjects: Deck['pickMultipleObjects'];
69
+ };
70
+
71
+ function getRefHandles(thisRef: DeckInstanceRef): DeckGLRef {
72
+ return {
73
+ get deck() {
74
+ return thisRef.deck;
75
+ },
76
+ // The following method can only be called after ref is available, by which point deck is defined in useEffect
77
+ pickObject: opts => thisRef.deck!.pickObject(opts),
78
+ pickMultipleObjects: opts => thisRef.deck!.pickMultipleObjects(opts),
79
+ pickObjects: opts => thisRef.deck!.pickObjects(opts)
45
80
  };
46
- Object.defineProperty(handles, 'deck', {
47
- get: () => thisRef.deck
48
- });
49
- return handles;
50
81
  }
51
82
 
52
- function redrawDeck(thisRef) {
83
+ function redrawDeck(thisRef: DeckInstanceRef) {
53
84
  if (thisRef.redrawReason) {
54
85
  // Only redraw if we have received a dirty flag
86
+ // @ts-expect-error accessing protected method
55
87
  thisRef.deck._drawLayers(thisRef.redrawReason);
56
88
  thisRef.redrawReason = null;
57
89
  }
58
90
  }
59
91
 
60
- function createDeckInstance(thisRef, props) {
92
+ function createDeckInstance(thisRef: DeckInstanceRef, props): Deck {
61
93
  // Allows a subclass of Deck to be used
62
94
  // TODO - update propTypes / defaultProps?
63
95
  const DeckClass = props.Deck || Deck;
@@ -80,7 +112,7 @@ function createDeckInstance(thisRef, props) {
80
112
  // Viewports have changed, update children props first.
81
113
  // This will delay the Deck canvas redraw till after React update (in useLayoutEffect)
82
114
  // so that the canvas does not get rendered before the child components update.
83
- thisRef.forceUpdate(v => v + 1);
115
+ thisRef.forceUpdate();
84
116
  } else {
85
117
  redrawDeck(thisRef);
86
118
  }
@@ -89,13 +121,16 @@ function createDeckInstance(thisRef, props) {
89
121
  return deck;
90
122
  }
91
123
 
92
- const DeckGL = forwardRef((props, ref) => {
93
- // A reference to persistent states
94
- const _thisRef = useRef({});
95
- const thisRef = _thisRef.current;
124
+ const DeckGL = forwardRef<DeckGLRef, DeckGLProps>((props, ref) => {
96
125
  // A mechanism to force redraw
97
126
  const [version, setVersion] = useState(0);
98
- thisRef.forceUpdate = setVersion;
127
+ // A reference to persistent states
128
+ const _thisRef = useRef<DeckInstanceRef>({
129
+ control: null,
130
+ version,
131
+ forceUpdate: () => setVersion(v => v + 1)
132
+ });
133
+ const thisRef = _thisRef.current;
99
134
  // DOM refs
100
135
  const containerRef = useRef(null);
101
136
  const canvasRef = useRef(null);
@@ -109,7 +144,7 @@ const DeckGL = forwardRef((props, ref) => {
109
144
  // Callbacks
110
145
  let inRender = true;
111
146
 
112
- const handleViewStateChange = params => {
147
+ const handleViewStateChange: DeckProps['onViewStateChange'] = params => {
113
148
  if (inRender && props.viewState) {
114
149
  // Callback may invoke a state update. Defer callback to after render() to avoid React error
115
150
  // In React StrictMode, render is executed twice and useEffect/useLayoutEffect is executed once
@@ -118,10 +153,10 @@ const DeckGL = forwardRef((props, ref) => {
118
153
  return null;
119
154
  }
120
155
  thisRef.viewStateUpdateRequested = null;
121
- return props.onViewStateChange(params);
156
+ return props.onViewStateChange?.(params);
122
157
  };
123
158
 
124
- const handleInteractionStateChange = params => {
159
+ const handleInteractionStateChange: DeckProps['onInteractionStateChange'] = params => {
125
160
  if (inRender) {
126
161
  // Callback may invoke a state update. Defer callback to after render() to avoid React error
127
162
  // In React StrictMode, render is executed twice and useEffect/useLayoutEffect is executed once
@@ -129,7 +164,7 @@ const DeckGL = forwardRef((props, ref) => {
129
164
  thisRef.interactionStateUpdateRequested = params;
130
165
  } else {
131
166
  thisRef.interactionStateUpdateRequested = null;
132
- props.onInteractionStateChange(params);
167
+ props.onInteractionStateChange?.(params);
133
168
  }
134
169
  };
135
170
 
@@ -137,7 +172,7 @@ const DeckGL = forwardRef((props, ref) => {
137
172
  // the next animation frame.
138
173
  // Needs to be called both from initial mount, and when new props are received
139
174
  const deckProps = useMemo(() => {
140
- const forwardProps = {
175
+ const forwardProps: DeckProps = {
141
176
  ...props,
142
177
  // Override user styling props. We will set the canvas style in render()
143
178
  style: null,
@@ -149,6 +184,10 @@ const DeckGL = forwardRef((props, ref) => {
149
184
  onInteractionStateChange: handleInteractionStateChange
150
185
  };
151
186
 
187
+ // The defaultValue for _customRender is null, which would overwrite the definition
188
+ // of _customRender. Remove to avoid frequently redeclaring the method here.
189
+ delete forwardProps._customRender;
190
+
152
191
  if (thisRef.deck) {
153
192
  thisRef.deck.setProps(forwardProps);
154
193
  }
@@ -163,7 +202,7 @@ const DeckGL = forwardRef((props, ref) => {
163
202
  canvas: canvasRef.current
164
203
  });
165
204
 
166
- return () => thisRef.deck.finalize();
205
+ return () => thisRef.deck?.finalize();
167
206
  }, []);
168
207
 
169
208
  useIsomorphicLayoutEffect(() => {
@@ -184,8 +223,7 @@ const DeckGL = forwardRef((props, ref) => {
184
223
 
185
224
  useImperativeHandle(ref, () => getRefHandles(thisRef), []);
186
225
 
187
- const {viewManager} = thisRef.deck || {};
188
- const currentViewports = viewManager && viewManager.getViewports();
226
+ const currentViewports = thisRef.deck && thisRef.deck.getViewports();
189
227
 
190
228
  const {ContextProvider, width, height, id, style} = props;
191
229
 
@@ -234,7 +272,6 @@ const DeckGL = forwardRef((props, ref) => {
234
272
  return thisRef.control;
235
273
  });
236
274
 
237
- DeckGL.propTypes = Deck.getPropTypes(PropTypes);
238
275
  DeckGL.defaultProps = Deck.defaultProps;
239
276
 
240
277
  export default DeckGL;
package/src/index.ts ADDED
@@ -0,0 +1,26 @@
1
+ // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
2
+ //
3
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ // of this software and associated documentation files (the "Software"), to deal
5
+ // in the Software without restriction, including without limitation the rights
6
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ // copies of the Software, and to permit persons to whom the Software is
8
+ // furnished to do so, subject to the following conditions:
9
+ //
10
+ // The above copyright notice and this permission notice shall be included in
11
+ // all copies or substantial portions of the Software.
12
+ //
13
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ // THE SOFTWARE.
20
+
21
+ export {default as DeckGL} from './deckgl';
22
+ export {default} from './deckgl';
23
+
24
+ // Types
25
+ export type {DeckGLContextValue} from './utils/position-children-under-views';
26
+ export type {DeckGLRef, DeckGLProps} from './deckgl';
@@ -0,0 +1,47 @@
1
+ import * as React from 'react';
2
+ import {cloneElement} from 'react';
3
+
4
+ const MAP_STYLE = {position: 'absolute', zIndex: -1};
5
+
6
+ export default function evaluateChildren(
7
+ children: React.ReactNode,
8
+ childProps: any
9
+ ): React.ReactNode {
10
+ if (typeof children === 'function') {
11
+ return children(childProps);
12
+ }
13
+ if (Array.isArray(children)) {
14
+ return children.map(child => evaluateChildren(child, childProps));
15
+ }
16
+ if (isComponent(children)) {
17
+ // Special treatment for react-map-gl's Map component
18
+ // to support shorthand use case <DeckGL><StaticMap /></DeckGL>
19
+ if (isReactMap(children)) {
20
+ // Place map under the canvas
21
+ childProps.style = MAP_STYLE;
22
+ return cloneElement(children, childProps);
23
+ }
24
+ if (needsDeckGLViewProps(children)) {
25
+ return cloneElement(children, childProps);
26
+ }
27
+ }
28
+
29
+ return children;
30
+ }
31
+
32
+ export function isComponent(child: React.ReactNode): child is React.ReactElement {
33
+ return (child && typeof child === 'object' && 'type' in child) || false;
34
+ }
35
+
36
+ function isReactMap(child: React.ReactElement): boolean {
37
+ const componentClass = child.type;
38
+ // @ts-expect-error defaultProps is not defined on JSXElementConstructor
39
+ const componentProps = componentClass && componentClass.defaultProps;
40
+ return componentProps && componentProps.mapStyle;
41
+ }
42
+
43
+ function needsDeckGLViewProps(child: React.ReactElement): boolean {
44
+ const componentClass = child.type;
45
+ // @ts-expect-error deckGLViewProps is a custom hack defined on the constructor (nebula.gl)
46
+ return componentClass && componentClass.deckGLViewProps;
47
+ }
@@ -1,38 +1,53 @@
1
- import React, {createElement} from 'react';
1
+ import * as React from 'react';
2
+ import {createElement} from 'react';
2
3
  import {inheritsFrom} from './inherits-from';
3
4
  import {Layer, View} from '@deck.gl/core';
5
+ import {isComponent} from './evaluate-children';
6
+ import type {LayersList} from '@deck.gl/core';
4
7
 
5
8
  // recursively wrap render callbacks in `View`
6
- function wrapInView(node) {
7
- if (!node) {
8
- return node;
9
- }
9
+ function wrapInView(node: React.ReactNode): React.ReactNode {
10
10
  if (typeof node === 'function') {
11
11
  // React.Children does not traverse functions.
12
12
  // All render callbacks must be protected under a <View>
13
+ // @ts-expect-error View is not a ReactJSXElement constructor. Only used as a temporary wrapper and will be removed in extractJSXLayers
13
14
  return createElement(View, {}, node);
14
15
  }
15
16
  if (Array.isArray(node)) {
16
17
  return node.map(wrapInView);
17
18
  }
18
- if (node.type === React.Fragment) {
19
- return wrapInView(node.props.children);
20
- }
21
- if (inheritsFrom(node.type, View)) {
22
- return node;
19
+ if (isComponent(node)) {
20
+ if (node.type === React.Fragment) {
21
+ return wrapInView(node.props.children);
22
+ }
23
+ if (inheritsFrom(node.type, View)) {
24
+ return node;
25
+ }
23
26
  }
24
27
  return node;
25
28
  }
26
29
 
27
30
  // extracts any deck.gl layers masquerading as react elements from props.children
28
- export default function extractJSXLayers({children, layers, views}) {
29
- const reactChildren = []; // extract real react elements (i.e. not deck.gl layers)
30
- const jsxLayers = []; // extracted layer from react children, will add to deck.gl layer array
31
- const jsxViews = {};
31
+ export default function extractJSXLayers({
32
+ children,
33
+ layers = [],
34
+ views = null
35
+ }: {
36
+ children?: React.ReactNode;
37
+ layers?: LayersList;
38
+ views?: View | View[] | null;
39
+ }): {
40
+ children: React.ReactNode[];
41
+ layers: LayersList;
42
+ views: View | View[] | null;
43
+ } {
44
+ const reactChildren: React.ReactNode[] = []; // extract real react elements (i.e. not deck.gl layers)
45
+ const jsxLayers: LayersList = []; // extracted layer from react children, will add to deck.gl layer array
46
+ const jsxViews: Record<string, View> = {};
32
47
 
33
48
  // React.children
34
49
  React.Children.forEach(wrapInView(children), reactElement => {
35
- if (reactElement) {
50
+ if (isComponent(reactElement)) {
36
51
  // For some reason Children.forEach doesn't filter out `null`s
37
52
  const ElementType = reactElement.type;
38
53
  if (inheritsFrom(ElementType, Layer)) {
@@ -43,10 +58,13 @@ export default function extractJSXLayers({children, layers, views}) {
43
58
  }
44
59
 
45
60
  // empty id => default view
46
- if (ElementType !== View && inheritsFrom(ElementType, View) && reactElement.props.id) {
61
+ if (inheritsFrom(ElementType, View) && ElementType !== View && reactElement.props.id) {
62
+ // @ts-ignore Cannot instantiate an abstract class (View)
47
63
  const view = new ElementType(reactElement.props);
48
64
  jsxViews[view.id] = view;
49
65
  }
66
+ } else if (reactElement) {
67
+ reactChildren.push(reactElement);
50
68
  }
51
69
  });
52
70
 
@@ -69,7 +87,7 @@ export default function extractJSXLayers({children, layers, views}) {
69
87
  return {layers, children: reactChildren, views};
70
88
  }
71
89
 
72
- function createLayer(LayerType, reactProps) {
90
+ function createLayer(LayerType: typeof Layer, reactProps: any): Layer {
73
91
  const props = {};
74
92
  // Layer.defaultProps is treated as ReactElement.defaultProps and merged into react props
75
93
  // Remove them
@@ -79,5 +97,6 @@ function createLayer(LayerType, reactProps) {
79
97
  props[key] = reactProps[key];
80
98
  }
81
99
  }
100
+ // @ts-ignore Cannot instantiate an abstract class (Layer)
82
101
  return new LayerType(props);
83
102
  }
@@ -1,10 +1,23 @@
1
+ import * as React from 'react';
2
+
1
3
  const CANVAS_ONLY_STYLES = {
2
4
  mixBlendMode: null
3
5
  };
4
6
 
5
- export default function extractStyles({width, height, style}) {
7
+ export default function extractStyles({
8
+ width,
9
+ height,
10
+ style
11
+ }: {
12
+ width?: string | number;
13
+ height?: string | number;
14
+ style?: Partial<CSSStyleDeclaration> | null;
15
+ }): {
16
+ containerStyle: React.CSSProperties;
17
+ canvasStyle: React.CSSProperties;
18
+ } {
6
19
  // This styling is enforced for correct positioning with children
7
- const containerStyle = {
20
+ const containerStyle: React.CSSProperties = {
8
21
  position: 'absolute',
9
22
  zIndex: 0,
10
23
  left: 0,
@@ -14,7 +27,7 @@ export default function extractStyles({width, height, style}) {
14
27
  };
15
28
 
16
29
  // Fill the container
17
- const canvasStyle = {
30
+ const canvasStyle: React.CSSProperties = {
18
31
  left: 0,
19
32
  top: 0
20
33
  };
@@ -1,5 +1,5 @@
1
1
  // Check if one JavaScript class inherits from another
2
- export function inheritsFrom(Type, ParentType) {
2
+ export function inheritsFrom<T>(Type: any, ParentType: T): Type is T {
3
3
  while (Type) {
4
4
  if (Type === ParentType) {
5
5
  return true;
@@ -1,19 +1,45 @@
1
+ import * as React from 'react';
1
2
  import {createElement} from 'react';
2
3
  import {View} from '@deck.gl/core';
3
4
  import {inheritsFrom} from './inherits-from';
4
- import evaluateChildren from './evaluate-children';
5
+ import evaluateChildren, {isComponent} from './evaluate-children';
6
+
7
+ import type {Deck, DeckProps, Viewport} from '@deck.gl/core';
8
+ import type {EventManager} from 'mjolnir.js';
9
+
10
+ export type DeckGLContextValue = {
11
+ viewport: Viewport;
12
+ container: HTMLElement;
13
+ eventManager: EventManager;
14
+ onViewStateChange: DeckProps['onViewStateChange'];
15
+ };
5
16
 
6
17
  // Iterate over views and reposition children associated with views
7
18
  // TODO - Can we supply a similar function for the non-React case?
8
- export default function positionChildrenUnderViews({children, deck, ContextProvider}) {
19
+ export default function positionChildrenUnderViews({
20
+ children,
21
+ deck,
22
+ ContextProvider
23
+ }: {
24
+ children: React.ReactNode[];
25
+ deck?: Deck;
26
+ ContextProvider?: React.Context<DeckGLContextValue>['Provider'];
27
+ }): React.ReactNode[] {
28
+ // @ts-expect-error accessing protected property
9
29
  const {viewManager} = deck || {};
10
30
 
11
31
  if (!viewManager || !viewManager.views.length) {
12
32
  return [];
13
33
  }
14
34
 
15
- const views = {};
16
- const defaultViewId = viewManager.views[0].id;
35
+ const views: Record<
36
+ string,
37
+ {
38
+ viewport: Viewport;
39
+ children: React.ReactNode[];
40
+ }
41
+ > = {};
42
+ const defaultViewId = (viewManager.views[0] as View).id;
17
43
 
18
44
  // Sort children by view id
19
45
  for (const child of children) {
@@ -21,12 +47,12 @@ export default function positionChildrenUnderViews({children, deck, ContextProvi
21
47
  let viewId = defaultViewId;
22
48
  let viewChildren = child;
23
49
 
24
- if (inheritsFrom(child.type, View)) {
50
+ if (isComponent(child) && inheritsFrom(child.type, View)) {
25
51
  viewId = child.props.id || defaultViewId;
26
52
  viewChildren = child.props.children;
27
53
  }
28
54
 
29
- const viewport = viewManager.getViewport(viewId);
55
+ const viewport = viewManager.getViewport(viewId) as Viewport;
30
56
  const viewState = viewManager.getViewState(viewId);
31
57
 
32
58
  // Drop (auto-hide) elements with viewId that are not matched by any current view
@@ -70,12 +96,15 @@ export default function positionChildrenUnderViews({children, deck, ContextProvi
70
96
  const viewElement = createElement('div', {key, id: key, style}, ...viewChildren);
71
97
 
72
98
  if (ContextProvider) {
73
- const contextValue = {
99
+ const contextValue: DeckGLContextValue = {
74
100
  viewport,
101
+ // @ts-expect-error accessing protected property
75
102
  container: deck.canvas.offsetParent,
103
+ // @ts-expect-error accessing protected property
76
104
  eventManager: deck.eventManager,
77
105
  onViewStateChange: params => {
78
106
  params.viewId = viewId;
107
+ // @ts-expect-error accessing protected method
79
108
  deck._onViewStateChange(params);
80
109
  }
81
110
  };
@@ -0,0 +1,25 @@
1
+ import * as React from 'react';
2
+ import { Deck } from '@deck.gl/core/typed';
3
+ import type { DeckGLContextValue } from './utils/position-children-under-views';
4
+ import type { DeckProps } from '@deck.gl/core/typed';
5
+ /** DeckGL React component props */
6
+ export declare type DeckGLProps = Omit<DeckProps, 'width' | 'height' | 'gl' | 'parent' | 'canvas' | '_customRender'> & {
7
+ width?: string | number;
8
+ height?: string | number;
9
+ children?: React.ReactNode;
10
+ ContextProvider?: React.Context<DeckGLContextValue>['Provider'];
11
+ };
12
+ export declare type DeckGLRef = {
13
+ deck?: Deck;
14
+ pickObject: Deck['pickObject'];
15
+ pickObjects: Deck['pickObjects'];
16
+ pickMultipleObjects: Deck['pickMultipleObjects'];
17
+ };
18
+ declare const DeckGL: React.ForwardRefExoticComponent<Omit<DeckProps, "width" | "height" | "gl" | "parent" | "canvas" | "_customRender"> & {
19
+ width?: string | number | undefined;
20
+ height?: string | number | undefined;
21
+ children?: React.ReactNode;
22
+ ContextProvider?: React.Provider<DeckGLContextValue> | undefined;
23
+ } & React.RefAttributes<DeckGLRef>>;
24
+ export default DeckGL;
25
+ //# sourceMappingURL=deckgl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deckgl.d.ts","sourceRoot":"","sources":["../src/deckgl.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,EAAC,IAAI,EAAC,MAAM,eAAe,CAAC;AAOnC,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,uCAAuC,CAAC;AAC9E,OAAO,KAAK,EAAC,SAAS,EAAW,MAAM,eAAe,CAAC;AAevD,mCAAmC;AACnC,oBAAY,WAAW,GAAG,IAAI,CAC5B,SAAS,EACT,OAAO,GAAG,QAAQ,GAAG,IAAI,GAAG,QAAQ,GAAG,QAAQ,GAAG,eAAe,CAClE,GAAG;IACF,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,eAAe,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC,CAAC;CACjE,CAAC;AAEF,oBAAY,SAAS,GAAG;IACtB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/B,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACjC,mBAAmB,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;CAClD,CAAC;AAuDF,QAAA,MAAM,MAAM;;;eAhEC,MAAM,SAAS;;mCAqN1B,CAAC;AAIH,eAAe,MAAM,CAAC"}