@map-colonies/react-components 4.13.5 → 4.14.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.
- package/dist/@map-colonies/react-components.es.js +3185 -2992
- package/dist/@map-colonies/react-components.umd.js +20 -20
- package/dist/cesium-map/active-layers/active-layers-panel.css +9 -0
- package/dist/cesium-map/debug/debugger-widget.css +95 -0
- package/dist/cesium-map/debug/{wfs-debug-widget.d.ts → debugger-widget.d.ts} +2 -2
- package/dist/cesium-map/debug/wfs.css +18 -0
- package/dist/cesium-map/debug/wfs.d.ts +1 -1
- package/dist/cesium-map/helpers/customImageryProviders.d.ts +11 -0
- package/dist/cesium-map/helpers/utils.d.ts +1 -0
- package/dist/cesium-map/layers/wfs.layer.d.ts +24 -0
- package/dist/cesium-map/layers-manager.d.ts +9 -1
- package/dist/cesium-map/map.css +31 -6
- package/dist/cesium-map/map.d.ts +1 -1
- package/package.json +2 -2
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
body[dir='rtl'] .cesium-viewer .activeLayersPanel .cesium-cesiumInspector-sectionHeader::before {
|
|
2
|
+
margin-right: 0;
|
|
3
|
+
margin-left: 5px;
|
|
4
|
+
}
|
|
5
|
+
|
|
1
6
|
.cesium-viewer .activeLayersPanel .layer {
|
|
2
7
|
display: flex;
|
|
3
8
|
justify-content: space-between;
|
|
@@ -11,6 +16,10 @@
|
|
|
11
16
|
text-overflow: ellipsis;
|
|
12
17
|
}
|
|
13
18
|
|
|
19
|
+
.cesium-viewer .activeLayersPanel .name:not(.disabled) {
|
|
20
|
+
cursor: default;
|
|
21
|
+
}
|
|
22
|
+
|
|
14
23
|
.cesium-viewer .activeLayersPanel .name.disabled {
|
|
15
24
|
opacity: 0.5;
|
|
16
25
|
pointer-events: none;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
.cesium-viewer .cesium-mc-title {
|
|
2
|
+
cursor: text;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.cesium-viewer .debuggerWidgetSections {
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
gap: 8px;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.cesium-viewer .debuggerWidgetSection {
|
|
12
|
+
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
13
|
+
border-radius: 6px;
|
|
14
|
+
background: rgba(0, 0, 0, 0.25);
|
|
15
|
+
overflow: hidden;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.cesium-viewer .debuggerWidgetSectionHeader {
|
|
19
|
+
display: flex;
|
|
20
|
+
align-items: center;
|
|
21
|
+
justify-content: flex-start;
|
|
22
|
+
padding: 6px 8px;
|
|
23
|
+
font-size: 13px;
|
|
24
|
+
font-weight: 700;
|
|
25
|
+
letter-spacing: 0.2px;
|
|
26
|
+
text-transform: uppercase;
|
|
27
|
+
color: var(--mdc-theme-cesium-color);
|
|
28
|
+
background: linear-gradient(180deg, rgba(255, 255, 255, 0.12), rgba(255, 255, 255, 0.03));
|
|
29
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.14);
|
|
30
|
+
cursor: pointer;
|
|
31
|
+
user-select: none;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.cesium-viewer .debuggerWidgetSectionHeaderLabel {
|
|
35
|
+
flex: 1;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.cesium-viewer .debuggerWidgetSectionHeaderToggle {
|
|
39
|
+
margin-right: 5px;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
body[dir='rtl'] .cesium-viewer .debuggerWidgetSectionHeaderToggle {
|
|
43
|
+
margin-right: 0;
|
|
44
|
+
margin-left: 5px;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.cesium-viewer .debuggerWidgetSectionContent {
|
|
48
|
+
padding: 8px;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.cesium-viewer .debuggerWidgetSectionContent .wfsContainer {
|
|
52
|
+
margin-top: 0;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.cesium-viewer .debuggerWidgetSectionContent .wfsContainer .title {
|
|
56
|
+
display: none;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.cesium-viewer .debuggerWidgetSectionContent .optimizationCheckbox,
|
|
60
|
+
.cesium-viewer .debuggerWidgetSectionContent .cesiumInspectorCheckbox {
|
|
61
|
+
margin-bottom: 0;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.cesium-viewer .debuggerWidgetSectionContent .optimizationCheckbox label,
|
|
65
|
+
.cesium-viewer .debuggerWidgetSectionContent .cesiumInspectorCheckbox label {
|
|
66
|
+
cursor: pointer;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.cesium-viewer .debuggerLayerList {
|
|
70
|
+
margin-top: 8px;
|
|
71
|
+
display: flex;
|
|
72
|
+
flex-direction: column;
|
|
73
|
+
gap: 4px;
|
|
74
|
+
border-top: 1px solid rgba(255, 255, 255, 0.1);
|
|
75
|
+
padding-top: 6px;
|
|
76
|
+
text-align: left;
|
|
77
|
+
direction: ltr;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.cesium-viewer .debuggerLayerItem {
|
|
81
|
+
font-size: 11px;
|
|
82
|
+
line-height: 1.6;
|
|
83
|
+
font-weight: bold;
|
|
84
|
+
opacity: 0.5;
|
|
85
|
+
cursor: text;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.cesium-viewer .debuggerLayerItem.relevant {
|
|
89
|
+
color: #AEF;
|
|
90
|
+
opacity: 1;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.cesium-viewer .debuggerLayerItem[data-has-tooltip='true'] {
|
|
94
|
+
cursor: default;
|
|
95
|
+
}
|
|
@@ -11,10 +11,10 @@ interface IFeatureTypeMetadata {
|
|
|
11
11
|
export type IActiveFeatureTypes = IFeatureTypeMetadata & {
|
|
12
12
|
zoomLevel: number;
|
|
13
13
|
};
|
|
14
|
-
export interface
|
|
14
|
+
export interface IDebuggerWidgetProps extends IWidgetProps {
|
|
15
15
|
locale?: {
|
|
16
16
|
[key: string]: string;
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
|
-
export declare const
|
|
19
|
+
export declare const DebuggerWidget: (props: Omit<IDebuggerWidgetProps, keyof IWidgetProps>) => React.JSX.Element;
|
|
20
20
|
export {};
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
.cesium-viewer .wfsContainer {
|
|
2
|
+
margin-top: 12px;
|
|
3
|
+
}
|
|
4
|
+
|
|
1
5
|
.cesium-viewer .wfsContainer .title {
|
|
2
6
|
text-align: center;
|
|
3
7
|
font-weight: bold;
|
|
@@ -5,6 +9,14 @@
|
|
|
5
9
|
width: 260px;
|
|
6
10
|
}
|
|
7
11
|
|
|
12
|
+
.cesium-viewer .optimizationCheckbox {
|
|
13
|
+
margin-bottom: 12px;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.cesium-viewer .cesiumInspectorCheckbox {
|
|
17
|
+
margin-bottom: 12px;
|
|
18
|
+
}
|
|
19
|
+
|
|
8
20
|
.cesium-viewer .wfsContainer .featureType {
|
|
9
21
|
font-size: 12px;
|
|
10
22
|
margin-bottom: 12px;
|
|
@@ -32,6 +44,12 @@ body[dir='rtl'] .cesium-viewer .wfsContainer .featureType {
|
|
|
32
44
|
margin: 0 20px;
|
|
33
45
|
}
|
|
34
46
|
|
|
47
|
+
.cesium-viewer .wfsContainer .noDataLayers {
|
|
48
|
+
font-size: 12px;
|
|
49
|
+
opacity: 0.5;
|
|
50
|
+
cursor: text;
|
|
51
|
+
}
|
|
52
|
+
|
|
35
53
|
.cesium-viewer .wfsContainer .blinking {
|
|
36
54
|
animation: blink 1s infinite;
|
|
37
55
|
}
|
|
@@ -4,15 +4,23 @@ import { CesiumViewer } from '../map';
|
|
|
4
4
|
export interface CustomImageryProvider extends ImageryProvider {
|
|
5
5
|
readonly layerListInstance: ICesiumImageryLayer[];
|
|
6
6
|
tileTransparencyCheckedCounter: number;
|
|
7
|
+
examinedTilesForTransparencyCheck: IExaminedTileCoordinates[];
|
|
7
8
|
mapViewer: CesiumViewer;
|
|
8
9
|
readonly maxTilesForTransparencyCheck: number;
|
|
9
10
|
}
|
|
11
|
+
interface IExaminedTileCoordinates {
|
|
12
|
+
x: number;
|
|
13
|
+
y: number;
|
|
14
|
+
level: number;
|
|
15
|
+
}
|
|
10
16
|
export declare const HAS_TRANSPARENCY_META_PROP = "hasTransparency";
|
|
17
|
+
export declare const EXAMINED_TILES_META_PROP = "examinedTiles";
|
|
11
18
|
export declare class CustomUrlTemplateImageryProvider extends UrlTemplateImageryProvider {
|
|
12
19
|
readonly layerListInstance: ICesiumImageryLayer[];
|
|
13
20
|
readonly mapViewer: CesiumViewer;
|
|
14
21
|
readonly maxTilesForTransparencyCheck = 3;
|
|
15
22
|
tileTransparencyCheckedCounter: number;
|
|
23
|
+
examinedTilesForTransparencyCheck: IExaminedTileCoordinates[];
|
|
16
24
|
constructor(opts: UrlTemplateImageryProvider.ConstructorOptions, mapViewer: CesiumViewer);
|
|
17
25
|
requestImage(x: number, y: number, level: number, request?: Request | undefined): Promise<ImageryTypes> | undefined;
|
|
18
26
|
}
|
|
@@ -21,6 +29,7 @@ export declare class CustomWebMapServiceImageryProvider extends WebMapServiceIma
|
|
|
21
29
|
readonly mapViewer: CesiumViewer;
|
|
22
30
|
readonly maxTilesForTransparencyCheck = 3;
|
|
23
31
|
tileTransparencyCheckedCounter: number;
|
|
32
|
+
examinedTilesForTransparencyCheck: IExaminedTileCoordinates[];
|
|
24
33
|
constructor(opts: WebMapServiceImageryProvider.ConstructorOptions, mapViewer: CesiumViewer);
|
|
25
34
|
requestImage(x: number, y: number, level: number, request?: Request | undefined): Promise<ImageryTypes> | undefined;
|
|
26
35
|
}
|
|
@@ -29,6 +38,8 @@ export declare class CustomWebMapTileServiceImageryProvider extends WebMapTileSe
|
|
|
29
38
|
readonly mapViewer: CesiumViewer;
|
|
30
39
|
readonly maxTilesForTransparencyCheck = 3;
|
|
31
40
|
tileTransparencyCheckedCounter: number;
|
|
41
|
+
examinedTilesForTransparencyCheck: IExaminedTileCoordinates[];
|
|
32
42
|
constructor(opts: WebMapTileServiceImageryProvider.ConstructorOptions, mapViewer: CesiumViewer);
|
|
33
43
|
requestImage(x: number, y: number, level: number, request?: Request | undefined): Promise<ImageryTypes> | undefined;
|
|
34
44
|
}
|
|
45
|
+
export {};
|
|
@@ -38,6 +38,7 @@ export declare const center: (bbox: Rectangle) => Feature<Point>;
|
|
|
38
38
|
* @returns BBox array
|
|
39
39
|
*/
|
|
40
40
|
export declare const rectangle2bbox: (bbox: Rectangle) => BBox;
|
|
41
|
+
export declare const rectangle2Feature: (rect: Rectangle) => Feature<Polygon>;
|
|
41
42
|
export declare const customComputeViewRectangle: (mapViewer: CesiumViewer) => Rectangle;
|
|
42
43
|
/**
|
|
43
44
|
* Computes a limited view rectangle in case of 3D mode based on the camera position and max distance.
|
|
@@ -21,9 +21,33 @@ export interface ICesiumWFSLayerLabelingOptions {
|
|
|
21
21
|
strokeStyle: string | CanvasGradient | CanvasPattern;
|
|
22
22
|
lineWidth: number;
|
|
23
23
|
}
|
|
24
|
+
export interface IGqlServiceConfig {
|
|
25
|
+
query: string;
|
|
26
|
+
variablesDescriptor: {
|
|
27
|
+
featureProp: string;
|
|
28
|
+
startIndexProp: string;
|
|
29
|
+
countProp: string;
|
|
30
|
+
typeNameProp: string;
|
|
31
|
+
};
|
|
32
|
+
variables: {
|
|
33
|
+
data: Record<string, unknown>;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export interface IApiServiceConfig {
|
|
37
|
+
method?: 'GET' | 'POST';
|
|
38
|
+
headers?: Record<string, string>;
|
|
39
|
+
}
|
|
40
|
+
export type AlternativePayload = {
|
|
41
|
+
type: 'gql';
|
|
42
|
+
gql: IGqlServiceConfig;
|
|
43
|
+
} | {
|
|
44
|
+
type: 'api';
|
|
45
|
+
api: IApiServiceConfig;
|
|
46
|
+
};
|
|
24
47
|
export interface ICesiumWFSLayerOptions {
|
|
25
48
|
url: string;
|
|
26
49
|
featureType: string;
|
|
50
|
+
alternativePayload?: AlternativePayload;
|
|
27
51
|
style: {
|
|
28
52
|
color: string;
|
|
29
53
|
hover: string;
|
|
@@ -26,6 +26,7 @@ export interface IVectorLayer {
|
|
|
26
26
|
export type LegendExtractor = (layers: (any & {
|
|
27
27
|
meta: any;
|
|
28
28
|
})[]) => IMapLegend[];
|
|
29
|
+
export declare const TRANSPARENT_LAYER_ID = "TRANSPARENT_BASE_LAYER";
|
|
29
30
|
declare class LayerManager {
|
|
30
31
|
mapViewer: CesiumViewer;
|
|
31
32
|
legendsList: IMapLegend[];
|
|
@@ -35,7 +36,9 @@ declare class LayerManager {
|
|
|
35
36
|
private readonly dataLayers;
|
|
36
37
|
private readonly legendsExtractor?;
|
|
37
38
|
private readonly layerManagerFootprintMetaFieldPath;
|
|
38
|
-
private
|
|
39
|
+
private shouldOptimizedTileRequests?;
|
|
40
|
+
private relevancyListenersCleanup;
|
|
41
|
+
private relevancyLayerUpdatedHandler?;
|
|
39
42
|
constructor(mapViewer: CesiumViewer, legendsExtractor?: LegendExtractor, onLayersUpdate?: () => void, layerManagerFootprintMetaFieldPath?: string, shouldOptimizedTileRequests?: boolean);
|
|
40
43
|
get layerList(): ICesiumImageryLayer[];
|
|
41
44
|
get dataLayerList(): ICesiumWFSLayer[];
|
|
@@ -64,12 +67,17 @@ declare class LayerManager {
|
|
|
64
67
|
removeLayerUpdatedListener(callback: (meta: any) => void): void;
|
|
65
68
|
addDataLayerUpdatedListener(callback: (meta: any) => void): void;
|
|
66
69
|
removeDataLayerUpdatedListener(callback: (meta: any) => void): void;
|
|
70
|
+
setShouldOptimizedTileRequests(shouldOptimize: boolean): void;
|
|
67
71
|
findDataLayerById(dataLayerId: string): ICesiumWFSLayer | undefined;
|
|
68
72
|
private setLegends;
|
|
69
73
|
private getBaseLayersCount;
|
|
70
74
|
private findLayerById;
|
|
71
75
|
private updateLayersOrder;
|
|
72
76
|
private hideNonRelevantLayers;
|
|
77
|
+
private restoreAllLayersVisibility;
|
|
78
|
+
private clearLayersRelevancy;
|
|
79
|
+
private bindRelevancyListeners;
|
|
80
|
+
private unbindRelevancyListeners;
|
|
73
81
|
private markRelevantLayersForExtent;
|
|
74
82
|
}
|
|
75
83
|
export default LayerManager;
|
package/dist/cesium-map/map.css
CHANGED
|
@@ -18,6 +18,10 @@ body[dir='rtl'] .cesium-viewer .cesium-viewer-toolbar {
|
|
|
18
18
|
.cesium-viewer .widgetsContainer {
|
|
19
19
|
top: 24px;
|
|
20
20
|
left: 10px;
|
|
21
|
+
display: flex;
|
|
22
|
+
flex-direction: row;
|
|
23
|
+
align-items: flex-start;
|
|
24
|
+
gap: 12px;
|
|
21
25
|
}
|
|
22
26
|
|
|
23
27
|
body[dir='rtl'] .cesium-viewer .widgetsContainer {
|
|
@@ -25,6 +29,31 @@ body[dir='rtl'] .cesium-viewer .widgetsContainer {
|
|
|
25
29
|
right: 10px;
|
|
26
30
|
}
|
|
27
31
|
|
|
32
|
+
.cesium-viewer .cesium-viewer-cesiumInspectorWrapper .cesium-viewer-cesiumInspectorContainer {
|
|
33
|
+
left: 0;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
body[dir='rtl'] .cesium-viewer .cesium-viewer-cesiumInspectorWrapper .cesium-viewer-cesiumInspectorContainer {
|
|
37
|
+
left: unset;
|
|
38
|
+
right: 0;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.cesium-viewer .cesium-viewer-cesiumInspectorWrapper {
|
|
42
|
+
direction: ltr;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.cesium-viewer .cesium-viewer-cesiumInspectorWrapper .cesium-cesiumInspector {
|
|
46
|
+
box-sizing: content-box;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.cesium-viewer .cesium-viewer-cesiumInspectorWrapper .cesium-cesiumInspector-hidden {
|
|
50
|
+
height: 16px;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.cesium-viewer .cesium-viewer-cesiumInspectorWrapper .cesium-cesiumInspector-visible {
|
|
54
|
+
width: auto;
|
|
55
|
+
}
|
|
56
|
+
|
|
28
57
|
.cesium-viewer .cesium-mc-tool {
|
|
29
58
|
display: block;
|
|
30
59
|
position: absolute;
|
|
@@ -147,7 +176,7 @@ body[dir='rtl'] .cesium-viewer .bottomToolsContainer {
|
|
|
147
176
|
right: unset;
|
|
148
177
|
}
|
|
149
178
|
|
|
150
|
-
/* #region
|
|
179
|
+
/* #region NATIVE CONTROLS */
|
|
151
180
|
.cesium-viewer input[type='checkbox'] {
|
|
152
181
|
accent-color: var(--mdc-theme-cesium-checkbox-color);
|
|
153
182
|
}
|
|
@@ -178,10 +207,9 @@ body[dir='rtl'] .cesium-viewer .bottomToolsContainer {
|
|
|
178
207
|
background-color: #aaa;
|
|
179
208
|
border-radius: 6px;
|
|
180
209
|
}
|
|
181
|
-
|
|
182
210
|
/* #endregion for NATIVE CONTROLS */
|
|
183
211
|
|
|
184
|
-
/* #region
|
|
212
|
+
/* #region mdc-checkbox */
|
|
185
213
|
.cesium-viewer .mdc-checkbox .mdc-checkbox__native-control:enabled:checked ~ .mdc-checkbox__background,
|
|
186
214
|
.mdc-checkbox .mdc-checkbox__native-control:enabled:indeterminate ~ .mdc-checkbox__background,
|
|
187
215
|
.mdc-checkbox .mdc-checkbox__native-control[data-indeterminate='true']:enabled ~ .mdc-checkbox__background {
|
|
@@ -216,7 +244,6 @@ body[dir='rtl'] .cesium-viewer .bottomToolsContainer {
|
|
|
216
244
|
.cesium-viewer .mdc-ripple-upgraded--unbounded {
|
|
217
245
|
--mdc-ripple-fg-size: 0px !important;
|
|
218
246
|
}
|
|
219
|
-
|
|
220
247
|
/* #endregion mdc-checkbox */
|
|
221
248
|
|
|
222
249
|
/* #region mdc-list */
|
|
@@ -238,7 +265,6 @@ body[dir='rtl'] .cesium-viewer .bottomToolsContainer {
|
|
|
238
265
|
.cesium-viewer .mdc-text-field--filled {
|
|
239
266
|
height: 32px;
|
|
240
267
|
}
|
|
241
|
-
|
|
242
268
|
/* #endregion mdc-list */
|
|
243
269
|
|
|
244
270
|
/* #region mdc-TextField */
|
|
@@ -262,7 +288,6 @@ body[dir='rtl'] .cesium-viewer .bottomToolsContainer {
|
|
|
262
288
|
.cesium-viewer .mdc-line-ripple::after {
|
|
263
289
|
border-bottom: none !important;
|
|
264
290
|
}
|
|
265
|
-
|
|
266
291
|
/* #endregion mdc-TextField */
|
|
267
292
|
|
|
268
293
|
.cesium-viewer .disabled {
|
package/dist/cesium-map/map.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export declare class CesiumViewer extends CesiumViewerCls {
|
|
|
14
14
|
export type MapViewState = {
|
|
15
15
|
currentZoomLevel: number;
|
|
16
16
|
shouldOptimizedTileRequests: boolean;
|
|
17
|
+
showCesiumInspector: boolean;
|
|
17
18
|
};
|
|
18
19
|
interface IMapViewState {
|
|
19
20
|
viewState: MapViewState;
|
|
@@ -83,7 +84,6 @@ export interface CesiumMapProps extends ViewerProps {
|
|
|
83
84
|
};
|
|
84
85
|
baseMaps?: IBaseMaps;
|
|
85
86
|
terrains?: ITerrain[];
|
|
86
|
-
useOptimizedTileRequests?: boolean;
|
|
87
87
|
terrainProvider?: TerrainProvider;
|
|
88
88
|
imageryContextMenu?: React.ReactElement<IContextMenuData>;
|
|
89
89
|
imageryContextMenuSize?: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@map-colonies/react-components",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.14.1",
|
|
4
4
|
"main": "./dist/@map-colonies/react-components.umd.js",
|
|
5
5
|
"module": "./dist/@map-colonies/react-components.es.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -87,5 +87,5 @@
|
|
|
87
87
|
"files": [
|
|
88
88
|
"dist"
|
|
89
89
|
],
|
|
90
|
-
"gitHead": "
|
|
90
|
+
"gitHead": "7bf420cd0cd690cfa1c966a592fccf7b7c5fbb35"
|
|
91
91
|
}
|