@deck.gl-community/graph-layers 9.2.0-beta.2 → 9.2.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 (232) hide show
  1. package/dist/core/graph-engine.d.ts +63 -21
  2. package/dist/core/graph-engine.d.ts.map +1 -1
  3. package/dist/core/graph-engine.js +155 -75
  4. package/dist/core/graph-engine.js.map +1 -1
  5. package/dist/core/graph-layout.d.ts +22 -18
  6. package/dist/core/graph-layout.d.ts.map +1 -1
  7. package/dist/core/graph-layout.js +33 -18
  8. package/dist/core/graph-layout.js.map +1 -1
  9. package/dist/core/interaction-manager.d.ts +2 -2
  10. package/dist/core/interaction-manager.d.ts.map +1 -1
  11. package/dist/core/interaction-manager.js +7 -5
  12. package/dist/core/interaction-manager.js.map +1 -1
  13. package/dist/graph/arrow-graph.d.ts +69 -0
  14. package/dist/graph/arrow-graph.d.ts.map +1 -0
  15. package/dist/graph/arrow-graph.js +513 -0
  16. package/dist/graph/arrow-graph.js.map +1 -0
  17. package/dist/graph/classic-graph.d.ts +169 -0
  18. package/dist/graph/classic-graph.d.ts.map +1 -0
  19. package/dist/graph/classic-graph.js +390 -0
  20. package/dist/graph/classic-graph.js.map +1 -0
  21. package/dist/graph/edge.d.ts +6 -6
  22. package/dist/graph/edge.d.ts.map +1 -1
  23. package/dist/graph/edge.js.map +1 -1
  24. package/dist/graph/functions/arrow-utils.d.ts +6 -0
  25. package/dist/graph/functions/arrow-utils.d.ts.map +1 -0
  26. package/dist/graph/functions/arrow-utils.js +67 -0
  27. package/dist/graph/functions/arrow-utils.js.map +1 -0
  28. package/dist/graph/functions/create-graph-from-data.d.ts +3 -0
  29. package/dist/graph/functions/create-graph-from-data.d.ts.map +1 -0
  30. package/dist/graph/functions/create-graph-from-data.js +12 -0
  31. package/dist/graph/functions/create-graph-from-data.js.map +1 -0
  32. package/dist/graph/graph-normalization.d.ts +10 -0
  33. package/dist/graph/graph-normalization.d.ts.map +1 -0
  34. package/dist/graph/graph-normalization.js +65 -0
  35. package/dist/graph/graph-normalization.js.map +1 -0
  36. package/dist/graph/graph.d.ts +62 -155
  37. package/dist/graph/graph.d.ts.map +1 -1
  38. package/dist/graph/graph.js +11 -300
  39. package/dist/graph/graph.js.map +1 -1
  40. package/dist/graph/node.d.ts +6 -6
  41. package/dist/graph/node.d.ts.map +1 -1
  42. package/dist/graph/node.js +2 -2
  43. package/dist/graph/node.js.map +1 -1
  44. package/dist/graph-data/arrow-graph-data-builder.d.ts +21 -0
  45. package/dist/graph-data/arrow-graph-data-builder.d.ts.map +1 -0
  46. package/dist/graph-data/arrow-graph-data-builder.js +105 -0
  47. package/dist/graph-data/arrow-graph-data-builder.js.map +1 -0
  48. package/dist/graph-data/graph-data-builder.d.ts +6 -0
  49. package/dist/graph-data/graph-data-builder.d.ts.map +1 -0
  50. package/dist/graph-data/graph-data-builder.js +1 -0
  51. package/dist/graph-data/graph-data-builder.js.map +1 -0
  52. package/dist/graph-data/graph-data.d.ts +40 -0
  53. package/dist/graph-data/graph-data.d.ts.map +1 -0
  54. package/dist/graph-data/graph-data.js +11 -0
  55. package/dist/graph-data/graph-data.js.map +1 -0
  56. package/dist/graph-data/plain-graph-data-builder.d.ts +20 -0
  57. package/dist/graph-data/plain-graph-data-builder.d.ts.map +1 -0
  58. package/dist/graph-data/plain-graph-data-builder.js +105 -0
  59. package/dist/graph-data/plain-graph-data-builder.js.map +1 -0
  60. package/dist/graph-style-schema.cdn.js +1 -1
  61. package/dist/graph-style-schema.json +1 -1
  62. package/dist/index.cjs +6905 -4576
  63. package/dist/index.cjs.map +4 -4
  64. package/dist/index.d.ts +14 -7
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +24 -11
  67. package/dist/index.js.map +1 -1
  68. package/dist/layers/common-layers/flow-path-layer/flow-path-layer.d.ts.map +1 -1
  69. package/dist/layers/common-layers/flow-path-layer/flow-path-layer.js +1 -2
  70. package/dist/layers/common-layers/flow-path-layer/flow-path-layer.js.map +1 -1
  71. package/dist/layers/common-layers/grid-layer/grid-layer.d.ts +83 -0
  72. package/dist/layers/common-layers/grid-layer/grid-layer.d.ts.map +1 -0
  73. package/dist/layers/common-layers/grid-layer/grid-layer.js +133 -0
  74. package/dist/layers/common-layers/grid-layer/grid-layer.js.map +1 -0
  75. package/dist/layers/edge-attachment-helper.d.ts.map +1 -1
  76. package/dist/layers/edge-attachment-helper.js +1 -2
  77. package/dist/layers/edge-attachment-helper.js.map +1 -1
  78. package/dist/layers/graph-layer.d.ts +68 -11
  79. package/dist/layers/graph-layer.d.ts.map +1 -1
  80. package/dist/layers/graph-layer.js +435 -50
  81. package/dist/layers/graph-layer.js.map +1 -1
  82. package/dist/layouts/d3-dag/collapsable-d3-dag-layout.d.ts +24 -0
  83. package/dist/layouts/d3-dag/collapsable-d3-dag-layout.d.ts.map +1 -0
  84. package/dist/layouts/d3-dag/collapsable-d3-dag-layout.js +251 -0
  85. package/dist/layouts/d3-dag/collapsable-d3-dag-layout.js.map +1 -0
  86. package/dist/layouts/d3-dag/d3-dag-layout.d.ts +46 -61
  87. package/dist/layouts/d3-dag/d3-dag-layout.d.ts.map +1 -1
  88. package/dist/layouts/d3-dag/d3-dag-layout.js +85 -270
  89. package/dist/layouts/d3-dag/d3-dag-layout.js.map +1 -1
  90. package/dist/layouts/d3-force/d3-force-layout.d.ts +20 -8
  91. package/dist/layouts/d3-force/d3-force-layout.d.ts.map +1 -1
  92. package/dist/layouts/d3-force/d3-force-layout.js +39 -20
  93. package/dist/layouts/d3-force/d3-force-layout.js.map +1 -1
  94. package/dist/layouts/experimental/force-multi-graph-layout.d.ts +19 -15
  95. package/dist/layouts/experimental/force-multi-graph-layout.d.ts.map +1 -1
  96. package/dist/layouts/experimental/force-multi-graph-layout.js +47 -38
  97. package/dist/layouts/experimental/force-multi-graph-layout.js.map +1 -1
  98. package/dist/layouts/experimental/hive-plot-layout.d.ts +18 -15
  99. package/dist/layouts/experimental/hive-plot-layout.d.ts.map +1 -1
  100. package/dist/layouts/experimental/hive-plot-layout.js +33 -34
  101. package/dist/layouts/experimental/hive-plot-layout.js.map +1 -1
  102. package/dist/layouts/experimental/radial-layout.d.ts +12 -7
  103. package/dist/layouts/experimental/radial-layout.d.ts.map +1 -1
  104. package/dist/layouts/experimental/radial-layout.js +31 -14
  105. package/dist/layouts/experimental/radial-layout.js.map +1 -1
  106. package/dist/layouts/gpu-force/gpu-force-layout.d.ts +11 -8
  107. package/dist/layouts/gpu-force/gpu-force-layout.d.ts.map +1 -1
  108. package/dist/layouts/gpu-force/gpu-force-layout.js +59 -56
  109. package/dist/layouts/gpu-force/gpu-force-layout.js.map +1 -1
  110. package/dist/layouts/simple-layout.d.ts +8 -25
  111. package/dist/layouts/simple-layout.d.ts.map +1 -1
  112. package/dist/layouts/simple-layout.js +13 -17
  113. package/dist/layouts/simple-layout.js.map +1 -1
  114. package/dist/loaders/dot-graph-loader.d.ts +25 -0
  115. package/dist/loaders/dot-graph-loader.d.ts.map +1 -0
  116. package/dist/loaders/dot-graph-loader.js +668 -0
  117. package/dist/loaders/dot-graph-loader.js.map +1 -0
  118. package/dist/loaders/json-graph-loader.d.ts +6 -0
  119. package/dist/loaders/json-graph-loader.d.ts.map +1 -0
  120. package/dist/loaders/json-graph-loader.js +31 -0
  121. package/dist/loaders/json-graph-loader.js.map +1 -0
  122. package/dist/loaders/{edge-parsers.d.ts → parsers/edge-parsers.d.ts} +1 -1
  123. package/dist/loaders/parsers/edge-parsers.d.ts.map +1 -0
  124. package/dist/loaders/{edge-parsers.js → parsers/edge-parsers.js} +1 -1
  125. package/dist/loaders/parsers/edge-parsers.js.map +1 -0
  126. package/dist/loaders/{node-parsers.d.ts → parsers/node-parsers.d.ts} +1 -1
  127. package/dist/loaders/parsers/node-parsers.d.ts.map +1 -0
  128. package/dist/loaders/{node-parsers.js → parsers/node-parsers.js} +1 -1
  129. package/dist/loaders/parsers/node-parsers.js.map +1 -0
  130. package/dist/loaders/parsers/parse-json-graph.d.ts +29 -0
  131. package/dist/loaders/parsers/parse-json-graph.d.ts.map +1 -0
  132. package/dist/loaders/parsers/parse-json-graph.js +78 -0
  133. package/dist/loaders/parsers/parse-json-graph.js.map +1 -0
  134. package/dist/style/graph-style-engine.d.ts +4 -2
  135. package/dist/style/graph-style-engine.d.ts.map +1 -1
  136. package/dist/style/graph-style-engine.js +3 -2
  137. package/dist/style/graph-style-engine.js.map +1 -1
  138. package/dist/style/{style-engine.d.ts → stylesheet-engine.d.ts} +3 -3
  139. package/dist/style/stylesheet-engine.d.ts.map +1 -0
  140. package/dist/style/{style-engine.js → stylesheet-engine.js} +1 -1
  141. package/dist/style/stylesheet-engine.js.map +1 -0
  142. package/dist/utils/collapsed-chains.d.ts +8 -8
  143. package/dist/utils/collapsed-chains.d.ts.map +1 -1
  144. package/dist/utils/collapsed-chains.js +1 -6
  145. package/dist/utils/collapsed-chains.js.map +1 -1
  146. package/dist/utils/rank-grid.d.ts +30 -0
  147. package/dist/utils/rank-grid.d.ts.map +1 -0
  148. package/dist/utils/rank-grid.js +306 -0
  149. package/dist/utils/rank-grid.js.map +1 -0
  150. package/package.json +4 -8
  151. package/src/_disabled/arrow-graph-data.ts.disabled +18 -0
  152. package/src/_disabled/columnar-graph-data-builder.ts.disabled +250 -0
  153. package/src/_disabled/graph-runtime-layout.ts.disabled +29 -0
  154. package/src/core/graph-engine.ts +201 -84
  155. package/src/core/graph-layout.ts +52 -29
  156. package/src/core/interaction-manager.ts +20 -20
  157. package/src/graph/arrow-graph.ts +648 -0
  158. package/src/graph/classic-graph.ts +447 -0
  159. package/src/graph/edge.ts +7 -7
  160. package/src/graph/functions/arrow-utils.ts +72 -0
  161. package/src/graph/functions/convert-arrow-graph-to-classic-graph.ts.disabled +47 -0
  162. package/src/graph/functions/convert-plain-graph-to-arrow-graph.ts.disabled +119 -0
  163. package/src/graph/functions/create-graph-from-data.ts +16 -0
  164. package/src/graph/functions/create-plain-graph-from-data.ts.disabled +176 -0
  165. package/src/graph/graph-normalization.ts +87 -0
  166. package/src/graph/graph.ts +68 -339
  167. package/src/graph/node.ts +9 -9
  168. package/src/graph/tabular-graph.ts.disabled +761 -0
  169. package/src/graph-data/arrow-graph-data-builder.ts +165 -0
  170. package/src/graph-data/graph-data-builder.ts +7 -0
  171. package/src/graph-data/graph-data.ts +57 -0
  172. package/src/graph-data/plain-graph-data-builder.ts +132 -0
  173. package/src/index.ts +53 -13
  174. package/src/layers/common-layers/flow-path-layer/flow-path-layer.ts +1 -2
  175. package/src/layers/common-layers/grid-layer/grid-layer.ts +237 -0
  176. package/src/layers/edge-attachment-helper.ts +22 -16
  177. package/src/layers/graph-layer.ts +642 -62
  178. package/src/layouts/d3-dag/collapsable-d3-dag-layout.ts +330 -0
  179. package/src/layouts/d3-dag/d3-dag-layout.ts +166 -396
  180. package/src/layouts/d3-force/d3-force-layout.ts +52 -30
  181. package/src/layouts/experimental/force-multi-graph-layout.ts +55 -49
  182. package/src/layouts/experimental/hive-plot-layout.ts +41 -42
  183. package/src/layouts/experimental/radial-layout.ts +39 -20
  184. package/src/layouts/gpu-force/gpu-force-layout.ts +72 -70
  185. package/src/layouts/simple-layout.ts +20 -44
  186. package/src/loaders/{create-graph.ts → deprecated/create-graph.ts.disabled} +6 -6
  187. package/src/loaders/deprecated/json-classic-graph-loader.ts.disabled +33 -0
  188. package/src/loaders/{simple-json-graph-loader.ts → deprecated/simple-json-graph-loader.ts.disabled} +3 -3
  189. package/src/loaders/{table-graph-loader.ts → deprecated/table-graph-loader.ts.disabled} +8 -8
  190. package/src/loaders/dot-graph-loader.ts +860 -0
  191. package/src/loaders/json-graph-loader.ts +48 -0
  192. package/src/loaders/parsers/create-graph-data.ts.disabled +45 -0
  193. package/src/loaders/{edge-parsers.ts → parsers/edge-parsers.ts} +2 -2
  194. package/src/loaders/{node-parsers.ts → parsers/node-parsers.ts} +2 -2
  195. package/src/loaders/parsers/parse-json-graph.ts +134 -0
  196. package/src/style/graph-style-engine.ts +5 -2
  197. package/src/style/{style-engine.ts → stylesheet-engine.ts} +3 -3
  198. package/src/utils/collapsed-chains.ts +11 -17
  199. package/src/utils/rank-grid.ts +426 -0
  200. package/dist/loaders/create-graph.d.ts +0 -12
  201. package/dist/loaders/create-graph.d.ts.map +0 -1
  202. package/dist/loaders/create-graph.js +0 -38
  203. package/dist/loaders/create-graph.js.map +0 -1
  204. package/dist/loaders/edge-parsers.d.ts.map +0 -1
  205. package/dist/loaders/edge-parsers.js.map +0 -1
  206. package/dist/loaders/json-loader.d.ts +0 -7
  207. package/dist/loaders/json-loader.d.ts.map +0 -1
  208. package/dist/loaders/json-loader.js +0 -16
  209. package/dist/loaders/json-loader.js.map +0 -1
  210. package/dist/loaders/node-parsers.d.ts.map +0 -1
  211. package/dist/loaders/node-parsers.js.map +0 -1
  212. package/dist/loaders/simple-json-graph-loader.d.ts +0 -11
  213. package/dist/loaders/simple-json-graph-loader.d.ts.map +0 -1
  214. package/dist/loaders/simple-json-graph-loader.js +0 -20
  215. package/dist/loaders/simple-json-graph-loader.js.map +0 -1
  216. package/dist/loaders/table-graph-loader.d.ts +0 -16
  217. package/dist/loaders/table-graph-loader.d.ts.map +0 -1
  218. package/dist/loaders/table-graph-loader.js +0 -91
  219. package/dist/loaders/table-graph-loader.js.map +0 -1
  220. package/dist/style/style-engine.d.ts.map +0 -1
  221. package/dist/style/style-engine.js.map +0 -1
  222. package/dist/widgets/long-press-button.d.ts +0 -12
  223. package/dist/widgets/long-press-button.d.ts.map +0 -1
  224. package/dist/widgets/long-press-button.js +0 -31
  225. package/dist/widgets/long-press-button.js.map +0 -1
  226. package/dist/widgets/view-control-widget.d.ts +0 -77
  227. package/dist/widgets/view-control-widget.d.ts.map +0 -1
  228. package/dist/widgets/view-control-widget.js +0 -197
  229. package/dist/widgets/view-control-widget.js.map +0 -1
  230. package/src/loaders/json-loader.ts +0 -19
  231. package/src/widgets/long-press-button.tsx +0 -50
  232. package/src/widgets/view-control-widget.tsx +0 -339
@@ -1,339 +0,0 @@
1
- // deck.gl-community
2
- // SPDX-License-Identifier: MIT
3
- // Copyright (c) vis.gl contributors
4
-
5
- import {Component, render} from 'preact';
6
-
7
- // import {FlyToInterpolator} from '@deck.gl/core';
8
- import {Widget, type Deck, type Viewport, type WidgetPlacement} from '@deck.gl/core';
9
- import {LongPressButton} from './long-press-button';
10
-
11
- export const ViewControlWrapper = ({children}) => (
12
- <div
13
- style={{
14
- alignItems: 'center',
15
- display: 'flex',
16
- flexDirection: 'column',
17
- position: 'absolute',
18
- zIndex: 99,
19
- userSelect: 'none'
20
- }}
21
- >
22
- {' '}
23
- {children}{' '}
24
- </div>
25
- );
26
-
27
- export const NavigationButtonContainer = ({children}) => (
28
- <div
29
- style={{
30
- background: '#f7f7f7',
31
- borderRadius: '23px',
32
- border: '0.5px solid #eaeaea',
33
- boxShadow: 'inset 11px 11px 5px -7px rgba(230, 230, 230, 0.49)',
34
- height: '46px',
35
- width: '46px'
36
- }}
37
- >
38
- {' '}
39
- {children}{' '}
40
- </div>
41
- );
42
-
43
- export type NavigationButtonProps = {
44
- left: any;
45
- top: any;
46
- rotate?: number;
47
- children?: any;
48
- onClick?: () => void;
49
- };
50
-
51
- export const NavigationButton = (props: NavigationButtonProps) => (
52
- <div
53
- onClick={props.onClick}
54
- style={{
55
- color: '#848484',
56
- cursor: 'pointer',
57
- position: 'absolute',
58
- left: props.left,
59
- top: props.top,
60
- transform: `rotate(${props.rotate || 0}deg)`
61
- // &:hover,
62
- // &:active {
63
- // color: #00ade6;
64
- // }
65
- }}
66
- >
67
- {' '}
68
- {props.children}{' '}
69
- </div>
70
- );
71
-
72
- export const ZoomControlWrapper = ({children}) => (
73
- <div
74
- style={{
75
- alignItems: 'center',
76
- background: '#f7f7f7',
77
- border: '0.5px solid #eaeaea',
78
- display: 'flex',
79
- flexDirection: 'column',
80
- marginTop: '6px',
81
- padding: '2px 0',
82
- width: '18px'
83
- }}
84
- >
85
- {' '}
86
- {children}{' '}
87
- </div>
88
- );
89
-
90
- export const VerticalSlider = ({children}) => (
91
- <div
92
- style={{
93
- display: 'inline-block',
94
- height: '100px',
95
- padding: '0',
96
- width: '10px'
97
-
98
- // > input[type='range'][orient='vertical'] {
99
- // -webkit-appearance: slider-vertical;
100
- // height: 100px;
101
- // padding: 0;
102
- // margin: 0;
103
- // width: 10px;
104
- // }
105
- }}
106
- >
107
- {' '}
108
- {children}{' '}
109
- </div>
110
- );
111
-
112
- export const ZoomControlButton = ({children}) => (
113
- <div
114
- style={{
115
- cursor: 'pointer',
116
- fontSize: '14px',
117
- fontWeight: 500,
118
- margin: '-4px'
119
-
120
- // &:hover,
121
- // &:active {
122
- // color: #00ade6;
123
- // }
124
- }}
125
- >
126
- {' '}
127
- {children}{' '}
128
- </div>
129
- );
130
-
131
- export type ViewControlProps = {
132
- id?: string;
133
- viewId?: string;
134
- placement?: WidgetPlacement;
135
- fitBounds: () => void;
136
- panBy?: (dx: number, dy: number) => void;
137
- zoomBy?: (delta: number) => void;
138
- zoomLevel: number;
139
- minZoom: number;
140
- maxZoom: number;
141
- deltaPan: number;
142
- deltaZoom: number;
143
- /** CSS inline style overrides. */
144
- style?: Partial<CSSStyleDeclaration>;
145
- /** Additional CSS class. */
146
- className?: string;
147
- };
148
-
149
- export class ViewControl extends Component<ViewControlProps> {
150
- static displayName = 'ViewControl';
151
-
152
- static defaultProps: Required<ViewControlProps> = {
153
- id: undefined,
154
- viewId: undefined,
155
- placement: 'top-left',
156
- fitBounds: () => {},
157
- panBy: () => {},
158
- zoomBy: () => {},
159
- zoomLevel: 1,
160
- deltaPan: 10,
161
- deltaZoom: 0.1,
162
- minZoom: 0.1,
163
- maxZoom: 1,
164
- style: {},
165
- className: ''
166
- };
167
-
168
- // pan actions
169
- panUp = () => this.props.panBy(0, this.props.deltaPan);
170
- panDown = () => this.props.panBy(0, -1 * this.props.deltaPan);
171
- panLeft = () => this.props.panBy(this.props.deltaPan, 0);
172
- panRight = () => this.props.panBy(-1 * this.props.deltaPan, 0);
173
-
174
- // zoom actions
175
- zoomIn = () => this.props.zoomBy(this.props.deltaZoom);
176
- zoomOut = () => this.props.zoomBy(-1 * this.props.deltaZoom);
177
- onChangeZoomLevel = (evt) => {
178
- const delta = evt.target.value - this.props.zoomLevel;
179
- this.props.zoomBy(delta);
180
- };
181
-
182
- render() {
183
- const buttons = [
184
- {top: -2, left: 14, rotate: 0, onClick: this.panUp, content: '▲', key: 'up'},
185
- {top: 12, left: 0, rotate: -90, onClick: this.panLeft, content: '◀', key: 'left'},
186
- {top: 12, left: 28, rotate: 90, onClick: this.panRight, content: '▶', key: 'right'},
187
- {top: 25, left: 14, rotate: 180, onClick: this.panDown, content: '▼', key: 'down'}
188
- ];
189
-
190
- return (
191
- <ViewControlWrapper>
192
- <NavigationButtonContainer>
193
- {buttons.map((b: any) => (
194
- <NavigationButton key={b.key} top={`${b.top}px`} left={`${b.left}px`} rotate={b.rotate}>
195
- <LongPressButton onClick={b.onClick}>{b.content}</LongPressButton>
196
- </NavigationButton>
197
- ))}
198
- <NavigationButton
199
- top={'12px'}
200
- left={'16px'}
201
- onClick={() => {
202
- // console.log('on click fit bounds') || this.props.fitBounds;
203
- }}
204
- >
205
- {'¤'}
206
- </NavigationButton>
207
- </NavigationButtonContainer>
208
- <ZoomControlWrapper>
209
- <ZoomControlButton>
210
- <LongPressButton onClick={this.zoomIn}>{'+'}</LongPressButton>
211
- </ZoomControlButton>
212
- <VerticalSlider>
213
- <input
214
- type="range"
215
- value={this.props.zoomLevel}
216
- min={this.props.minZoom}
217
- max={this.props.maxZoom}
218
- step={this.props.deltaZoom}
219
- onChange={this.onChangeZoomLevel}
220
- /* @ts-expect-error TODO */
221
- orient="vertical"
222
- />
223
- </VerticalSlider>
224
- <ZoomControlButton>
225
- <LongPressButton onClick={this.zoomOut}>{'-'}</LongPressButton>
226
- </ZoomControlButton>
227
- </ZoomControlWrapper>
228
- </ViewControlWrapper>
229
- );
230
- }
231
- }
232
-
233
- export class ViewControlWidget extends Widget<ViewControlProps> {
234
- id = 'zoom';
235
- placement: WidgetPlacement = 'top-left';
236
- orientation: 'vertical' | 'horizontal' = 'vertical';
237
- viewId?: string | null = null;
238
- viewports: {[id: string]: Viewport} = {};
239
- element?: HTMLDivElement;
240
- className = 'deck-widget-view-control';
241
-
242
- constructor(props: ViewControlProps) {
243
- super(props);
244
- this.props = {...ViewControl.defaultProps, ...props};
245
- this.id = props.id || 'zoom';
246
- this.viewId = props.viewId || null;
247
- this.placement = props.placement || 'top-left';
248
- // this.orientation = props.orientation || 'vertical';
249
- // props.transitionDuration = props.transitionDuration || 200;
250
- // props.zoomInLabel = props.zoomInLabel || 'Zoom In';
251
- // props.zoomOutLabel = props.zoomOutLabel || 'Zoom Out';
252
- props.style = props.style || {};
253
- }
254
-
255
- onAdd({deck}: {deck: Deck<any>}): HTMLDivElement {
256
- this.deck = deck;
257
- this.element = document.createElement('div');
258
-
259
- const {style, className} = this.props;
260
- this.element.classList.add('deck-widget', 'deck-widget-zoom');
261
- if (className) {
262
- this.element.classList.add(className);
263
- }
264
- if (style) {
265
- Object.entries(style).map(([key, value]) =>
266
- this.element.style.setProperty(key, value as string)
267
- );
268
- }
269
-
270
- return this.element;
271
- }
272
-
273
- onRemove() {
274
- this.deck = undefined;
275
- this.element = undefined;
276
- }
277
-
278
- onRenderHTML(rootElement: HTMLElement): void {
279
- const ui = (
280
- <ViewControl
281
- {...this.props}
282
- zoomBy={this.handleDeltaZoom.bind(this)}
283
- panBy={this.handlePanBy.bind(this)}
284
- />
285
- );
286
- render(ui, rootElement);
287
- }
288
-
289
- setProps(props: Partial<ViewControlProps>) {
290
- Object.assign(this.props, props);
291
- }
292
-
293
- onViewportChange(viewport: Viewport) {
294
- this.viewports[viewport.id] = viewport;
295
- }
296
-
297
- handleDeltaZoom(deltaZoom: number) {
298
- // console.log('Handle delta zoom');
299
- for (const view of this.deck.getViewports()) {
300
- this.handleZoomView(view, view.zoom + deltaZoom);
301
- }
302
- }
303
-
304
- handlePanBy(deltaX: number, deltaY: number) {
305
- // console.log('Handle panby', deltaX, deltaY);
306
- for (const viewport of this.deck.getViewports()) {
307
- this.handlePanViewport(viewport, deltaX, deltaY);
308
- }
309
- }
310
-
311
- handleZoomView(viewport: Viewport, nextZoom: number) {
312
- const viewId = this.viewId || viewport?.id || 'default-view';
313
- // @ts-expect-error TODO we lack a proper API for getting viewStates
314
- const viewState = this.deck.viewManager.viewState || viewport;
315
- const nextViewState = {
316
- ...viewState,
317
- zoom: nextZoom
318
- // transitionDuration: this.props.transitionDuration,
319
- // transitionInterpolator: new FlyToInterpolator()
320
- };
321
-
322
- // @ts-ignore Using private method temporary until there's a public one
323
- this.deck._onViewStateChange({viewId, viewState: nextViewState, interactionState: {}});
324
- }
325
-
326
- handlePanViewport(viewport: Viewport, deltaX: number, deltaY: number) {
327
- const viewId = this.viewId || viewport?.id || 'default-view';
328
- // @ts-expect-error TODO we lack a proper API for getting viewStates
329
- const viewState = this.deck.viewManager.viewState || viewport;
330
- // console.log('Handle pan viewport', deltaX, deltaY, viewState);
331
- const nextViewState = {
332
- ...viewState,
333
- position: [viewport.position[0] + deltaX, viewport.position[1] + deltaY]
334
- };
335
-
336
- // @ts-ignore Using private method temporary until there's a public one
337
- this.deck._onViewStateChange({viewId, viewState: nextViewState, interactionState: {}});
338
- }
339
- }