@metastringfoundation/map-list 0.1.0 → 0.1.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 (35) hide show
  1. package/dist/components/Handler/LayerCompareControl.d.ts +7 -0
  2. package/dist/components/Handler/LayerCompareControl.d.ts.map +1 -0
  3. package/dist/components/Handler/LayerCompareControl.js +18 -0
  4. package/dist/components/dualMap/index.d.ts +2 -0
  5. package/dist/components/dualMap/index.d.ts.map +1 -0
  6. package/dist/components/dualMap/index.js +114 -0
  7. package/dist/components/map/layers/index.d.ts.map +1 -1
  8. package/dist/components/map/layers/index.js +17 -13
  9. package/dist/components/map/layers/raster/index.d.ts.map +1 -1
  10. package/dist/components/map/layers/raster/index.js +4 -6
  11. package/dist/components/map/layers/vector/index.d.ts.map +1 -1
  12. package/dist/components/map/layers/vector/index.js +1 -0
  13. package/dist/components/map/split-map/SplitMapComparision.d.ts +2 -0
  14. package/dist/components/map/split-map/SplitMapComparision.d.ts.map +1 -0
  15. package/dist/components/map/split-map/SplitMapComparision.js +78 -0
  16. package/dist/components/sidebar/common/layer-compare-addon.d.ts +4 -0
  17. package/dist/components/sidebar/common/layer-compare-addon.d.ts.map +1 -0
  18. package/dist/components/sidebar/common/layer-compare-addon.js +17 -0
  19. package/dist/components/sidebar/common/layer-item.d.ts.map +1 -1
  20. package/dist/components/sidebar/common/layer-item.js +2 -1
  21. package/dist/components/sidebar/common/opacity-handler-addon.js +1 -1
  22. package/dist/components/sidebar/index.d.ts.map +1 -1
  23. package/dist/components/sidebar/selected/index.d.ts.map +1 -1
  24. package/dist/components/sidebar/selected/index.js +4 -4
  25. package/dist/hooks/use-layers.d.ts +2 -0
  26. package/dist/hooks/use-layers.d.ts.map +1 -1
  27. package/dist/hooks/use-layers.js +14 -4
  28. package/dist/index.css +51 -0
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +38 -2
  31. package/dist/services/naksha.d.ts.map +1 -1
  32. package/dist/services/naksha.js +11 -5
  33. package/dist/utils/naksha.d.ts.map +1 -1
  34. package/dist/utils/naksha.js +13 -6
  35. package/package.json +2 -2
@@ -0,0 +1,7 @@
1
+ interface LayerCompareControlProps {
2
+ compare: boolean;
3
+ setCompare: (value: boolean) => void;
4
+ }
5
+ export default function LayerCompareControl({ compare, setCompare, }: LayerCompareControlProps): import("react/jsx-runtime").JSX.Element | null;
6
+ export {};
7
+ //# sourceMappingURL=LayerCompareControl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayerCompareControl.d.ts","sourceRoot":"","sources":["../../../src/components/Handler/LayerCompareControl.tsx"],"names":[],"mappings":"AAKA,UAAU,wBAAwB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACtC;AAED,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,OAAO,EACP,UAAU,GACX,EAAE,wBAAwB,kDAoD1B"}
@@ -0,0 +1,18 @@
1
+ "use client";
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.default = LayerCompareControl;
8
+ const jsx_runtime_1 = require("react/jsx-runtime");
9
+ const use_layers_1 = __importDefault(require("../../hooks/use-layers"));
10
+ function LayerCompareControl({ compare, setCompare, }) {
11
+ const { layer } = (0, use_layers_1.default)();
12
+ // Defensive checks so it never crashes
13
+ const compareList = layer?.compareList || [];
14
+ // Hide component completely if fewer than 2 compare layers
15
+ if (compareList.length < 2)
16
+ return null;
17
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "absolute bottom-4 right-4 z-50 flex gap-2", children: [!compare && ((0, jsx_runtime_1.jsxs)("button", { onClick: () => setCompare(true), className: "px-4 py-2 bg-green-700 hover:bg-green-800 \n text-white rounded-lg shadow-md text-md flex items-center gap-1 font-semibold", children: ["Compare", " ", (0, jsx_runtime_1.jsx)("span", { className: "bg-white/5 px-2 py-1 rounded text-sm", children: compareList.length })] })), compare && ((0, jsx_runtime_1.jsxs)("button", { onClick: () => setCompare(false), className: "px-4 py-2 bg-green-700 hover:bg-green-800 \n text-white rounded-lg shadow-md text-md flex items-center gap-1 font-semibold", children: [(0, jsx_runtime_1.jsxs)("span", { className: "bg-white/5 px-1 py-1 rounded text-sm", children: [(0, jsx_runtime_1.jsxs)("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round", className: "lucide lucide-x-icon lucide-x", children: [(0, jsx_runtime_1.jsx)("path", { d: "M18 6 6 18" }), (0, jsx_runtime_1.jsx)("path", { d: "m6 6 12 12" })] }), " "] }), "Compare"] }))] }));
18
+ }
@@ -0,0 +1,2 @@
1
+ export default function DualMap(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/dualMap/index.tsx"],"names":[],"mappings":"AAeA,MAAM,CAAC,OAAO,UAAU,OAAO,4CA4H9B"}
@@ -0,0 +1,114 @@
1
+ "use client";
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.default = DualMap;
41
+ const jsx_runtime_1 = require("react/jsx-runtime");
42
+ const react_1 = require("react");
43
+ const maplibre_1 = __importStar(require("react-map-gl/maplibre"));
44
+ const map_common_1 = require("@metastringfoundation/map-common");
45
+ const use_layers_1 = __importDefault(require("../../hooks/use-layers"));
46
+ const infobar_1 = __importDefault(require("../infobar"));
47
+ const layers_1 = require("../map/layers");
48
+ const markers_list_1 = __importDefault(require("../map/markers-list"));
49
+ const popup_1 = __importDefault(require("../map/popup"));
50
+ const NavControl = maplibre_1.NavigationControl;
51
+ function DualMap() {
52
+ const { mp, layer, hover, query } = (0, use_layers_1.default)();
53
+ const viewState = (0, react_1.useMemo)(() => mp.defaultViewState || map_common_1.defaultViewState, [mp.defaultViewState]);
54
+ const [coordsLeft, setCoordsLeft] = (0, react_1.useState)();
55
+ const [coordsRight, setCoordsRight] = (0, react_1.useState)();
56
+ // handlers
57
+ // @ts-ignore
58
+ const onLeftClick = (e) => query.setClickedLngLat(e.lngLat);
59
+ // @ts-ignore
60
+ const onRightClick = (e) => query.setClickedLngLat(e.lngLat);
61
+ // @ts-ignore
62
+ const onLeftMouseMove = (e) => {
63
+ setCoordsLeft(e.lngLat);
64
+ hover.onHover(e);
65
+ };
66
+ // @ts-ignore
67
+ const onRightMouseMove = (e) => {
68
+ setCoordsRight(e.lngLat);
69
+ hover.onHover(e);
70
+ };
71
+ const compareList = layer?.compareList || [];
72
+ const selectedLayers = layer?.selectedLayers || [];
73
+ const [leftCompareId, rightCompareId] = (0, react_1.useMemo)(() => {
74
+ if (compareList && compareList.length >= 2) {
75
+ // most recent two (assumes newest at index 0)
76
+ return [compareList[0], compareList[1]];
77
+ }
78
+ // fallback: take first two selectedLayers' ids (if any)
79
+ const ids = selectedLayers.map((l) => l.id || null).filter(Boolean);
80
+ return [ids[0] || null, ids[1] || null];
81
+ }, [compareList, selectedLayers]);
82
+ // Filter the full selectedLayers list to get the layer objects for each side.
83
+ const leftLayersToRender = (0, react_1.useMemo)(() => {
84
+ if (!leftCompareId)
85
+ return [];
86
+ return selectedLayers.filter((l) => l.id === leftCompareId);
87
+ }, [selectedLayers, leftCompareId]);
88
+ const rightLayersToRender = (0, react_1.useMemo)(() => {
89
+ if (!rightCompareId)
90
+ return [];
91
+ return selectedLayers.filter((l) => l.id === rightCompareId);
92
+ }, [selectedLayers, rightCompareId]);
93
+ return ((0, jsx_runtime_1.jsxs)("div", { style: {
94
+ display: "grid",
95
+ gridTemplateColumns: "1fr 1fr",
96
+ width: "100%",
97
+ height: "100vh", // fixed viewport height
98
+ overflow: "hidden",
99
+ }, children: [layer.selectedFeatures?.length > 0 && (0, jsx_runtime_1.jsx)(infobar_1.default, {}), (0, jsx_runtime_1.jsx)("div", { style: {
100
+ width: "100%",
101
+ height: "100%",
102
+ position: "relative",
103
+ minHeight: 0, // <-- critical for grid/flex children
104
+ overflow: "hidden",
105
+ }, children: (0, jsx_runtime_1.jsxs)(maplibre_1.default, { id: "map-left", cursor: "default", initialViewState: viewState,
106
+ // render the map absolutely so it doesn't affect layout size
107
+ style: { position: "absolute", top: 0, left: 0, right: 0, bottom: 0 }, mapStyle: layer.mapStyle, onClick: onLeftClick, onMouseMove: onLeftMouseMove, children: [(0, jsx_runtime_1.jsx)(NavControl, { position: "top-right", showZoom: true, showCompass: true }), (0, jsx_runtime_1.jsx)(markers_list_1.default, {}), leftLayersToRender?.[0] && ((0, jsx_runtime_1.jsx)(layers_1.MapLayer, { layer: leftLayersToRender[0], beforeId: undefined })), (0, jsx_runtime_1.jsx)(popup_1.default, { coordinates: coordsLeft }, "popup-left")] }) }), (0, jsx_runtime_1.jsx)("div", { style: {
108
+ width: "100%",
109
+ height: "100%",
110
+ position: "relative",
111
+ minHeight: 0, // <-- critical
112
+ overflow: "hidden",
113
+ }, children: (0, jsx_runtime_1.jsxs)(maplibre_1.default, { id: "map-right", cursor: "default", initialViewState: viewState, style: { position: "absolute", top: 0, left: 0, right: 0, bottom: 0 }, mapStyle: layer.mapStyle, onClick: onRightClick, onMouseMove: onRightMouseMove, children: [(0, jsx_runtime_1.jsx)(NavControl, { position: "top-right", showZoom: true, showCompass: true }), (0, jsx_runtime_1.jsx)(markers_list_1.default, {}), rightLayersToRender?.[0] && ((0, jsx_runtime_1.jsx)(layers_1.MapLayer, { layer: rightLayersToRender[0], beforeId: undefined })), (0, jsx_runtime_1.jsx)(popup_1.default, { coordinates: coordsRight }, "popup-right")] }) })] }));
114
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/map/layers/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAKrD,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,QAAQ,CAAC,EAAC,MAAM,CAAA;CACjB,kDAuBA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/map/layers/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAKrD,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,kDAsBA"}
@@ -6,22 +6,26 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.MapLayer = MapLayer;
7
7
  const jsx_runtime_1 = require("react/jsx-runtime");
8
8
  const maplibre_1 = require("react-map-gl/maplibre");
9
+ const grid_1 = __importDefault(require("./grid"));
10
+ const vector_1 = __importDefault(require("./vector"));
9
11
  const raster_1 = __importDefault(require("./raster"));
10
12
  function MapLayer({ layer, beforeId, }) {
11
- console.log(layer, "layer from MapLayer");
12
13
  console.log("layer.source.type", layer?.source?.type);
13
- const { mapl } = (0, maplibre_1.useMap)();
14
- if (!mapl) {
14
+ const maps = (0, maplibre_1.useMap)();
15
+ // if (!mapl) {
16
+ // return null;
17
+ // }
18
+ const mapInstance = Object.values(maps).pop();
19
+ if (!mapInstance)
15
20
  return null;
21
+ switch (layer?.source?.type) {
22
+ case "vector":
23
+ return (0, jsx_runtime_1.jsx)(vector_1.default, { beforeId: beforeId, layer: layer });
24
+ case "grid":
25
+ return (0, jsx_runtime_1.jsx)(grid_1.default, { beforeId: beforeId, data: layer });
26
+ case "raster":
27
+ return (0, jsx_runtime_1.jsx)(raster_1.default, { beforeId: beforeId, data: layer });
28
+ default:
29
+ return (0, jsx_runtime_1.jsx)(vector_1.default, { beforeId: beforeId, layer: layer });
16
30
  }
17
- // switch (layer?.source?.type) {
18
- // case "vector":
19
- // return <VectorLayer beforeId={beforeId} layer={layer} />;
20
- // case "grid":
21
- // return <GridLayer beforeId={beforeId} data={layer} />;
22
- // case "raster":
23
- return (0, jsx_runtime_1.jsx)(raster_1.default, { beforeId: beforeId, data: layer });
24
- // default:
25
- // return <VectorLayer beforeId={beforeId} layer={layer} />;
26
- // }
27
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/map/layers/raster/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,CAAC,EAAC,MAAM,CAAA;CACjB,2CA4BA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/map/layers/raster/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,CAAC,EAAC,MAAM,CAAA;CACjB,2CA8BA"}
@@ -9,11 +9,9 @@ const maplibre_1 = require("react-map-gl/maplibre");
9
9
  const use_layers_1 = __importDefault(require("../../../../hooks/use-layers"));
10
10
  function RasterLayer({ data, beforeId, }) {
11
11
  const { mp } = (0, use_layers_1.default)();
12
- return ((0, jsx_runtime_1.jsx)(maplibre_1.Source, { id: data.id, type: "raster",
13
- // tiles={[
14
- // `${mp?.geoserver?.endpoint}/wms?bbox={bbox-epsg-3857}&format=image/png&service=WMS&version=1.1.1&request=GetMap&srs=EPSG:3857&width=256&height=256&transparent=true&layers=biodiv:${data.id}`,
15
- // ]}
16
- tiles: [
17
- `${mp?.geoserver?.endpoint}/wms?bbox={bbox-epsg-3857}&format=image/png&service=WMS&version=1.1.1&request=GetMap&srs=EPSG:3857&width=256&height=256&transparent=true&layers=metastring:kew`,
12
+ console.log(data, "datataatata");
13
+ return ((0, jsx_runtime_1.jsx)(maplibre_1.Source, { id: data.id, type: "raster", tiles: [
14
+ // @ts-ignore
15
+ `${mp?.geoserver?.endpoint}/wms?bbox={bbox-epsg-3857}&format=image/png&service=WMS&version=1.1.1&request=GetMap&srs=EPSG:3857&width=256&height=256&transparent=true&layers=metastring:${data.name}`,
18
16
  ], tileSize: 256, children: (0, jsx_runtime_1.jsx)(maplibre_1.Layer, { id: data.id, beforeId: beforeId, type: "raster", source: "biodiv", layout: { visibility: "visible" }, paint: {} }) }));
19
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/map/layers/vector/index.tsx"],"names":[],"mappings":"AAmBA,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;;;CAAA,2CA+B5D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/map/layers/vector/index.tsx"],"names":[],"mappings":"AAmBA,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;;;CAAA,2CAgC5D"}
@@ -25,5 +25,6 @@ function VectorLayer({ layer: data, beforeId }) {
25
25
  const { layer } = (0, use_layers_1.default)();
26
26
  const layerProps = (0, react_1.useMemo)(() => data.data?.styles?.[data.data?.styleIndex]?.colors, [data, layer.selectedFeatures]);
27
27
  const highlightData = layer.selectedFeaturesId?.[data.id];
28
+ console.log(data.source, "data.source ....");
28
29
  return ((0, jsx_runtime_1.jsxs)(maplibre_1.Source, { ...data.source, children: [layerProps && (0, jsx_runtime_1.jsx)(maplibre_1.Layer, { beforeId: beforeId, ...layerProps }), highlightData && layerProps && ((0, jsx_runtime_1.jsx)(maplibre_1.Layer, { ...layerProps, beforeId: beforeId, id: `hl_${data.id}`, filter: ["in", constants_1.PROPERTY_ID, ...highlightData], type: layerProps.type === "fill" ? "line" : layerProps.type, paint: paint[layerProps.type] }))] }));
29
30
  }
@@ -0,0 +1,2 @@
1
+ export default function TwoMapsSame(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=SplitMapComparision.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SplitMapComparision.d.ts","sourceRoot":"","sources":["../../../../src/components/map/split-map/SplitMapComparision.tsx"],"names":[],"mappings":"AAgBA,MAAM,CAAC,OAAO,UAAU,WAAW,4CA6ElC"}
@@ -0,0 +1,78 @@
1
+ // components/TwoMapsSame.tsx
2
+ "use client";
3
+ "use strict";
4
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
+ if (k2 === undefined) k2 = k;
6
+ var desc = Object.getOwnPropertyDescriptor(m, k);
7
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
8
+ desc = { enumerable: true, get: function() { return m[k]; } };
9
+ }
10
+ Object.defineProperty(o, k2, desc);
11
+ }) : (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ o[k2] = m[k];
14
+ }));
15
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
16
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
17
+ }) : function(o, v) {
18
+ o["default"] = v;
19
+ });
20
+ var __importStar = (this && this.__importStar) || (function () {
21
+ var ownKeys = function(o) {
22
+ ownKeys = Object.getOwnPropertyNames || function (o) {
23
+ var ar = [];
24
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
25
+ return ar;
26
+ };
27
+ return ownKeys(o);
28
+ };
29
+ return function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ })();
37
+ var __importDefault = (this && this.__importDefault) || function (mod) {
38
+ return (mod && mod.__esModule) ? mod : { "default": mod };
39
+ };
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.default = TwoMapsSame;
42
+ const jsx_runtime_1 = require("react/jsx-runtime");
43
+ const map_common_1 = require("@metastringfoundation/map-common");
44
+ const react_1 = require("react");
45
+ const maplibre_1 = __importStar(require("react-map-gl/maplibre"));
46
+ const use_layers_1 = __importDefault(require("../../../hooks/use-layers"));
47
+ const infobar_1 = __importDefault(require("../../infobar"));
48
+ const sidebar_1 = __importDefault(require("../../sidebar"));
49
+ const layers_1 = require("../layers");
50
+ const markers_list_1 = __importDefault(require("../markers-list"));
51
+ const popup_1 = __importDefault(require("../popup"));
52
+ const NavControl = maplibre_1.NavigationControl;
53
+ function TwoMapsSame() {
54
+ // single source of truth hook (same as your original Map)
55
+ const { mp, layer, hover, query } = (0, use_layers_1.default)();
56
+ // coordinates for popups — kept separate per map instance for clarity
57
+ const [coordsLeft, setCoordsLeft] = (0, react_1.useState)();
58
+ const [coordsRight, setCoordsRight] = (0, react_1.useState)();
59
+ const viewState = (0, react_1.useMemo)(() => mp.defaultViewState || map_common_1.defaultViewState, [mp.defaultViewState]);
60
+ // click handlers (reuse your query logic)
61
+ const onMapClick = (e) => query.setClickedLngLat(e.lngLat);
62
+ // mouse move handlers (separate so each map can show its own popup coordinates if needed)
63
+ const handleOnMouseMoveLeft = (event) => {
64
+ setCoordsLeft(event.lngLat);
65
+ hover.onHover(event);
66
+ };
67
+ const handleOnMouseMoveRight = (event) => {
68
+ setCoordsRight(event.lngLat);
69
+ hover.onHover(event);
70
+ };
71
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "w-full h-screen overflow-hidden flex", children: [mp.loadToC && (0, jsx_runtime_1.jsx)(sidebar_1.default, {}), layer.selectedFeatures?.length > 0 && (0, jsx_runtime_1.jsx)(infobar_1.default, {}), (0, jsx_runtime_1.jsx)("div", { className: "w-1/2 h-full relative border-r border-gray-200", children: (0, jsx_runtime_1.jsxs)(maplibre_1.default, { id: "map-left", cursor: "default", initialViewState: viewState, style: { width: "100%", height: "100%" }, mapStyle: layer.mapStyle, onClick: onMapClick, onMouseMove: handleOnMouseMoveLeft, children: [(0, jsx_runtime_1.jsx)(NavControl, { position: "top-right", showZoom: true, showCompass: true }), (0, jsx_runtime_1.jsx)(markers_list_1.default, {}), layer.selectedLayers.map((_l, index) => {
72
+ const beforeId = index > 0 ? layer.selectedIds[index - 1] : undefined;
73
+ return (0, jsx_runtime_1.jsx)(layers_1.MapLayer, { layer: _l, beforeId: beforeId }, _l.id + "-L");
74
+ }), (0, jsx_runtime_1.jsx)(popup_1.default, { coordinates: coordsLeft }, "popup-left")] }) }), (0, jsx_runtime_1.jsx)("div", { className: "w-1/2 h-full relative", children: (0, jsx_runtime_1.jsxs)(maplibre_1.default, { id: "map-right", cursor: "default", initialViewState: viewState, style: { width: "100%", height: "100%" }, mapStyle: layer.mapStyle, onClick: onMapClick, onMouseMove: handleOnMouseMoveRight, children: [(0, jsx_runtime_1.jsx)(NavControl, { position: "top-right", showZoom: true, showCompass: true }), (0, jsx_runtime_1.jsx)(markers_list_1.default, {}), layer.selectedLayers.map((_l, index) => {
75
+ const beforeId = index > 0 ? layer.selectedIds[index - 1] : undefined;
76
+ return (0, jsx_runtime_1.jsx)(layers_1.MapLayer, { layer: _l, beforeId: beforeId }, _l.id + "-R");
77
+ }), (0, jsx_runtime_1.jsx)(popup_1.default, { coordinates: coordsRight }, "popup-right")] }) })] }));
78
+ }
@@ -0,0 +1,4 @@
1
+ export default function LayerCompareAddon({ id }: {
2
+ id: string;
3
+ }): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=layer-compare-addon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layer-compare-addon.d.ts","sourceRoot":"","sources":["../../../../src/components/sidebar/common/layer-compare-addon.tsx"],"names":[],"mappings":"AAKA,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,2CAqB/D"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = LayerCompareAddon;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const use_layers_1 = __importDefault(require("../../../hooks/use-layers"));
9
+ const core_1 = require("../../core");
10
+ function LayerCompareAddon({ id }) {
11
+ const { layer } = (0, use_layers_1.default)();
12
+ const checked = Boolean(layer?.compareList?.includes(id));
13
+ const onToggle = () => {
14
+ layer.setCompareLayer(id, !checked);
15
+ };
16
+ return ((0, jsx_runtime_1.jsx)(core_1.Button, { children: (0, jsx_runtime_1.jsxs)("label", { className: "flex items-center gap-2 cursor-pointer select-none", children: [(0, jsx_runtime_1.jsx)("input", { type: "checkbox", className: "h-4 w-4 accent-green-700", checked: checked, onChange: onToggle }), (0, jsx_runtime_1.jsx)("span", { children: "Compare" })] }) }));
17
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"layer-item.d.ts","sourceRoot":"","sources":["../../../../src/components/sidebar/common/layer-item.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAwBrD,UAAU,cAAc;IACtB,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,oDAAoD;IACpD,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,aAAa,CAAC,EAAE,GAAG,CAAC;CACrB;AAGD,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,IAAI,EACJ,QAAQ,EACR,eAAe,EACf,aAAa,GACd,EAAE,cAAc,2CAyIhB"}
1
+ {"version":3,"file":"layer-item.d.ts","sourceRoot":"","sources":["../../../../src/components/sidebar/common/layer-item.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAyBrD,UAAU,cAAc;IACtB,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,oDAAoD;IACpD,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,aAAa,CAAC,EAAE,GAAG,CAAC;CACrB;AAED,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,IAAI,EACJ,QAAQ,EACR,eAAe,EACf,aAAa,GACd,EAAE,cAAc,2CAqIhB"}
@@ -15,6 +15,7 @@ const grid_legend_1 = __importDefault(require("./grid-legend"));
15
15
  const info_popover_1 = require("./info-popover");
16
16
  const layer_item_style_1 = __importDefault(require("./layer-item-style"));
17
17
  const opacity_handler_addon_1 = __importDefault(require("./opacity-handler-addon"));
18
+ const layer_compare_addon_1 = __importDefault(require("./layer-compare-addon"));
18
19
  function LayerItem({ item, extended, dragHandleProps, dragHandleRef, }) {
19
20
  const { layer, query, mp, query: { setClickedLngLat }, setIsInfoBarOpen, } = (0, use_layers_1.default)();
20
21
  const [isAdded, setIsAdded] = (0, react_1.useState)(layer.selectedIds.includes(item.id));
@@ -55,5 +56,5 @@ function LayerItem({ item, extended, dragHandleProps, dragHandleRef, }) {
55
56
  mp?.onLayerDownload(item.id);
56
57
  };
57
58
  const handleOnZoom = () => layer?.zoomToExtent(item?.id);
58
- return ((0, jsx_runtime_1.jsxs)("div", { className: "z-20 p-3 bg-white border-t border-gray-200", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex gap-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col items-center shrink-0", children: [(0, jsx_runtime_1.jsx)(core_1.CheckboxInput, { name: item.id, checked: isAdded, onChange: onToggleLayer, isLoading: isLoading }), extended && ((0, jsx_runtime_1.jsx)("div", { ref: dragHandleRef, ...dragHandleProps, className: "mt-1 w-6 text-center cursor-move", children: (0, jsx_runtime_1.jsx)(core_1.GrabberIcon, {}) }))] }), (0, jsx_runtime_1.jsx)("img", { className: "flex shrink-0 overflow-hidden h-16 w-16 p-1 mb-2 object-cover border border-gray-200 rounded", src: item.thumbnail || constants_1.FALLBACK_THUMB }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { title: item.title, className: "mb-1 leading-tight", style: constants_1.overflowStyle, children: (0, jsx_runtime_1.jsx)(highlighter_1.Highlighted, { text: item.title, highlight: query.term }) }), (0, jsx_runtime_1.jsx)("p", { title: item.description, className: "text-gray-600 text-sm", style: constants_1.overflowStyle2, children: item.description })] })] }), (0, jsx_runtime_1.jsx)("div", { className: "pb-3", children: extended && (0, jsx_runtime_1.jsx)(opacity_handler_addon_1.default, {}) }), (0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between", children: [(0, jsx_runtime_1.jsxs)(core_1.Button, { onClick: onDownloadLayer, disabled: !item.isDownloadable, children: [(0, jsx_runtime_1.jsx)(core_1.DownloadIcon, {}), " Download"] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex gap-3", children: [(0, jsx_runtime_1.jsx)(core_1.Button, { onClick: shareLayer, title: "Share", children: (0, jsx_runtime_1.jsx)(core_1.ShareIcon, {}) }), extended && ((0, jsx_runtime_1.jsx)(core_1.Button, { onClick: handleOnZoom, title: "Zoom To Extent", children: (0, jsx_runtime_1.jsx)(core_1.ZoomExtentIcon, {}) })), (0, jsx_runtime_1.jsx)(info_popover_1.PopoverWrapper, { item: item })] })] }), extended && (0, jsx_runtime_1.jsx)(layer_item_style_1.default, { item: item }), extended && item?.source?.type === "grid" && (0, jsx_runtime_1.jsx)(grid_legend_1.default, { item: item })] }));
59
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "z-20 p-3 bg-white border-t border-gray-200", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex gap-2", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col items-center shrink-0", children: [(0, jsx_runtime_1.jsx)(core_1.CheckboxInput, { name: item.id, checked: isAdded, onChange: onToggleLayer, isLoading: isLoading }), extended && ((0, jsx_runtime_1.jsx)("div", { ref: dragHandleRef, ...dragHandleProps, className: "mt-1 w-6 text-center cursor-move", children: (0, jsx_runtime_1.jsx)(core_1.GrabberIcon, {}) }))] }), (0, jsx_runtime_1.jsx)("img", { className: "flex shrink-0 overflow-hidden h-16 w-16 p-1 mb-2 object-cover border border-gray-200 rounded", src: item.thumbnail || constants_1.FALLBACK_THUMB }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { title: item.title, className: "mb-1 leading-tight", style: constants_1.overflowStyle, children: (0, jsx_runtime_1.jsx)(highlighter_1.Highlighted, { text: item.title, highlight: query.term }) }), (0, jsx_runtime_1.jsx)("p", { title: item.description, className: "text-gray-600 text-sm", style: constants_1.overflowStyle2, children: item.description })] })] }), (0, jsx_runtime_1.jsx)("div", { className: "pb-3", children: extended && (0, jsx_runtime_1.jsx)(opacity_handler_addon_1.default, {}) }), (0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between", children: [extended && ((0, jsx_runtime_1.jsx)(layer_compare_addon_1.default, { id: item.id })), !extended && ((0, jsx_runtime_1.jsxs)(core_1.Button, { onClick: onDownloadLayer, disabled: !item.isDownloadable, children: [(0, jsx_runtime_1.jsx)(core_1.DownloadIcon, {}), " Download"] })), (0, jsx_runtime_1.jsxs)("div", { className: "flex gap-3", children: [(0, jsx_runtime_1.jsx)(core_1.Button, { onClick: shareLayer, title: "Share", children: (0, jsx_runtime_1.jsx)(core_1.ShareIcon, {}) }), extended && ((0, jsx_runtime_1.jsx)(core_1.Button, { onClick: handleOnZoom, title: "Zoom To Extent", children: (0, jsx_runtime_1.jsx)(core_1.ZoomExtentIcon, {}) })), (0, jsx_runtime_1.jsx)(info_popover_1.PopoverWrapper, { item: item })] })] }), extended && (0, jsx_runtime_1.jsx)(layer_item_style_1.default, { item: item }), extended && item?.source?.type === "grid" && (0, jsx_runtime_1.jsx)(grid_legend_1.default, { item: item })] }));
59
60
  }
@@ -4,6 +4,6 @@ const jsx_runtime_1 = require("react/jsx-runtime");
4
4
  const react_1 = require("react");
5
5
  const OpacitySlider = () => {
6
6
  const [opacity, setOpacity] = (0, react_1.useState)(1);
7
- return ((0, jsx_runtime_1.jsx)("div", { className: "max-w-sm space-y-4", children: (0, jsx_runtime_1.jsx)("input", { id: "opacity-slider", type: "range", min: "0", max: "1", step: "0.01", value: opacity, onChange: (e) => setOpacity(Number(e.target.value)), className: "\n w-full cursor-pointer text-2xl\n " }) }));
7
+ return ((0, jsx_runtime_1.jsx)("div", { className: "max-w-sm space-y-4", children: (0, jsx_runtime_1.jsx)("input", { id: "opacity-slider", type: "range", min: "0", max: "1", step: "0.01", value: opacity, onChange: (e) => setOpacity(Number(e.target.value)), className: "\n w-full cursor-pointer text-2xl h-1\n " }) }));
8
8
  };
9
9
  exports.default = OpacitySlider;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/index.tsx"],"names":[],"mappings":"AAQA,MAAM,CAAC,OAAO,UAAU,OAAO,4CAsC9B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/index.tsx"],"names":[],"mappings":"AAQA,MAAM,CAAC,OAAO,UAAU,OAAO,4CAuC9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/sidebar/selected/index.tsx"],"names":[],"mappings":"AAOA,MAAM,CAAC,OAAO,UAAU,gBAAgB,4CAwBvC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/sidebar/selected/index.tsx"],"names":[],"mappings":"AAOA,MAAM,CAAC,OAAO,UAAU,gBAAgB,4CAgCvC"}
@@ -11,10 +11,10 @@ const selected_item_list_1 = require("./selected-item-list");
11
11
  const core_1 = require("../../core");
12
12
  function SelectedTabPanel() {
13
13
  const { layer } = (0, use_layers_1.default)();
14
- const onSortEnd = ({ oldIndex, newIndex }) => {
14
+ const onSortEnd = ({ oldIndex, newIndex, }) => {
15
15
  layer.setSelectedIds((0, array_move_1.arrayMoveImmutable)(layer.selectedIds, oldIndex, newIndex));
16
16
  };
17
- return ((0, jsx_runtime_1.jsxs)("div", { className: `flex flex-col gap-3 w-full`, children: [layer.selectedIds.length > 0 && ((0, jsx_runtime_1.jsx)("div", { className: `p-3 pb-0`, children: (0, jsx_runtime_1.jsxs)(core_1.Button, { onClick: () => layer.clearAll(), children: ["\u2715 ", ("clear")] }) })), (0, jsx_runtime_1.jsx)(selected_item_list_1.SelectedItemList, { layerList: layer.selectedLayers,
18
- // @ts-ignore
19
- useDragHandle: true, onSortEnd: onSortEnd })] }));
17
+ return ((0, jsx_runtime_1.jsx)("div", { className: "flex-1 min-h-0 overflow-y-auto", children: (0, jsx_runtime_1.jsxs)("div", { className: `flex flex-col gap-3 w-full`, children: [layer.selectedIds.length > 0 && ((0, jsx_runtime_1.jsx)("div", { className: `p-3 pb-0`, children: (0, jsx_runtime_1.jsxs)(core_1.Button, { onClick: () => layer.clearAll(), children: ["\u2715 ", "clear"] }) })), (0, jsx_runtime_1.jsx)(selected_item_list_1.SelectedItemList, { layerList: layer.selectedLayers,
18
+ // @ts-ignore
19
+ useDragHandle: true, onSortEnd: onSortEnd })] }) }));
20
20
  }
@@ -33,6 +33,8 @@ interface LayersContextProps {
33
33
  zoomToExtent: (layerId: string) => void;
34
34
  gridLegends: Record<string, any>;
35
35
  setGridLegends: (g: Record<string, any>) => void;
36
+ compareList: string[];
37
+ setCompareLayer: (layerId: string, checked: boolean) => void;
36
38
  };
37
39
  query: {
38
40
  term: string;
@@ -1 +1 @@
1
- {"version":3,"file":"use-layers.d.ts","sourceRoot":"","sources":["../../src/hooks/use-layers.tsx"],"names":[],"mappings":"AACA,OAAO,KAMN,MAAM,OAAO,CAAC;AAGf,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAStE,UAAU,kBAAkB;IAC1B,EAAE,EAAE,qBAAqB,CAAC;IAC1B,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC5C,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,KAAK,EAAE;QACL,QAAQ,CAAC,EAAE,GAAG,CAAC;QACf,WAAW,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAC9B,gBAAgB,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QACxC,GAAG,EAAE,cAAc,EAAE,CAAC;QACtB,MAAM,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;QAC3C,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;QACxC,cAAc,EAAE,cAAc,EAAE,CAAC;QAEjC,QAAQ,EAAE,MAAM,IAAI,CAAC;QACrB,MAAM,EAAE,CAAC,IAAI,EAAE;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,GAAG,EAAE,OAAO,CAAC;YACb,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB,KAAK,CAAC,EAAE,OAAO,CAAC;SACjB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC3B,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC3E,gBAAgB,EAAE,GAAG,CAAC;QACtB,kBAAkB,EAAE,GAAG,CAAC;QACxB,mBAAmB,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QACtC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;QAC9D,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QACpD,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;QAC3C,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QAEvC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QAExC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjC,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;KAClD,CAAC;IACF,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QAC7B,aAAa,EAAE,GAAG,CAAC;QACnB,gBAAgB,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;KACpC,CAAC;IACF,KAAK,EAAE;QACL,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAC1B,QAAQ,EAAE,GAAG,CAAC;KACf,CAAC;CACH;AAED,UAAU,mBAAmB;IAC3B,EAAE,EAAE,qBAAqB,CAAC;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAMD,eAAO,MAAM,cAAc,GAAI,uBAAuB,mBAAmB,4CA8UxE,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,SAAS,uBAEhC"}
1
+ {"version":3,"file":"use-layers.d.ts","sourceRoot":"","sources":["../../src/hooks/use-layers.tsx"],"names":[],"mappings":"AAIA,OAAO,KAMN,MAAM,OAAO,CAAC;AAGf,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAStE,UAAU,kBAAkB;IAC1B,EAAE,EAAE,qBAAqB,CAAC;IAC1B,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC5C,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,KAAK,EAAE;QACL,QAAQ,CAAC,EAAE,GAAG,CAAC;QACf,WAAW,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAC9B,gBAAgB,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QACxC,GAAG,EAAE,cAAc,EAAE,CAAC;QACtB,MAAM,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;QAC3C,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;QACxC,cAAc,EAAE,cAAc,EAAE,CAAC;QAEjC,QAAQ,EAAE,MAAM,IAAI,CAAC;QACrB,MAAM,EAAE,CAAC,IAAI,EAAE;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,GAAG,EAAE,OAAO,CAAC;YACb,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB,KAAK,CAAC,EAAE,OAAO,CAAC;SACjB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC3B,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC3E,gBAAgB,EAAE,GAAG,CAAC;QACtB,kBAAkB,EAAE,GAAG,CAAC;QACxB,mBAAmB,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QACtC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;QAC9D,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QACpD,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;QAC3C,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QAEvC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QAExC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjC,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;QACrD,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;KAE1D,CAAC;IACF,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QAC7B,aAAa,EAAE,GAAG,CAAC;QACnB,gBAAgB,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;KACpC,CAAC;IACF,KAAK,EAAE;QACL,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAC1B,QAAQ,EAAE,GAAG,CAAC;KACf,CAAC;CACH;AAED,UAAU,mBAAmB;IAC3B,EAAE,EAAE,qBAAqB,CAAC;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAMD,eAAO,MAAM,cAAc,GAAI,uBAAuB,mBAAmB,4CA4VxE,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,SAAS,uBAEhC"}
@@ -63,6 +63,15 @@ const LayersProvider = ({ mp: _mp, children }) => {
63
63
  const [selectedLayerIds, setSelectedLayerIds] = (0, react_1.useState)(mp.selectedLayers || []);
64
64
  const [hoverFeatures, setHoverFeatures] = (0, react_1.useState)();
65
65
  const [selectedFeatures, setSelectedFeatures] = (0, react_1.useState)();
66
+ const [compareList, setCompareList] = (0, react_1.useState)((_mp && _mp.compareList) || []);
67
+ const setCompareLayer = (layerId, checked) => {
68
+ setCompareList((prev) => {
69
+ if (checked)
70
+ return Array.from(new Set([layerId, ...prev]));
71
+ return prev.filter((id) => id !== layerId);
72
+ });
73
+ // optional: call mp.onCompareChange(layerId, checked) if you want callbacks
74
+ };
66
75
  const selectedFeaturesId = (0, react_1.useMemo)(() => {
67
76
  const meta = {};
68
77
  for (const qr of selectedFeatures || []) {
@@ -103,8 +112,7 @@ const LayersProvider = ({ mp: _mp, children }) => {
103
112
  // @ts-ignore
104
113
  layer, styleIndex, mp.nakshaApiEndpoint, mp.geoserver);
105
114
  updateLayerById(layer.id, { data: layerData });
106
- focus &&
107
- mapl?.fitBounds(layer.bbox, { padding: 40, duration: 1000 });
115
+ // focus && mapl?.fitBounds(layer.bbox as any, { padding: 40, duration: 1000 });
108
116
  };
109
117
  const updateLayerStyle = async (layerId, styleIndex) => {
110
118
  const layerIndex = getLayerIndexById(layerId);
@@ -148,9 +156,9 @@ const LayersProvider = ({ mp: _mp, children }) => {
148
156
  setSelectedLayerIds(selectedLayerIds.filter((_lyrId) => layerId !== _lyrId));
149
157
  return;
150
158
  }
151
- // const layerIndex = getLayerIndexById(layerId);
159
+ const layerIndex = getLayerIndexById(layerId);
152
160
  // const sourceType = layers[layerIndex]?.source.type;
153
- // await toggleVectorLayer(layerIndex, styleIndex, focus);
161
+ await toggleVectorLayer(layerIndex, styleIndex, focus);
154
162
  setSelectedLayerIds((prev) => {
155
163
  const updated = [layerId, ...prev.filter((id) => id !== layerId)];
156
164
  return updated;
@@ -277,6 +285,8 @@ const LayersProvider = ({ mp: _mp, children }) => {
277
285
  zoomToExtent,
278
286
  gridLegends,
279
287
  setGridLegends,
288
+ compareList: compareList,
289
+ setCompareLayer: setCompareLayer,
280
290
  },
281
291
  query: {
282
292
  term: queryTermDebounced,
package/dist/index.css CHANGED
@@ -11,6 +11,8 @@
11
11
  --color-red-200: oklch(88.5% 0.062 18.334);
12
12
  --color-red-600: oklch(57.7% 0.245 27.325);
13
13
  --color-red-800: oklch(44.4% 0.177 26.899);
14
+ --color-green-700: oklch(52.7% 0.154 150.069);
15
+ --color-green-800: oklch(44.8% 0.119 151.328);
14
16
  --color-blue-300: oklch(80.9% 0.105 251.813);
15
17
  --color-blue-500: oklch(62.3% 0.214 259.815);
16
18
  --color-blue-600: oklch(54.6% 0.245 262.881);
@@ -34,6 +36,7 @@
34
36
  --text-2xl: 1.5rem;
35
37
  --text-2xl--line-height: calc(2 / 1.5);
36
38
  --font-weight-medium: 500;
39
+ --font-weight-semibold: 600;
37
40
  --tracking-wide: 0.025em;
38
41
  --leading-tight: 1.25;
39
42
  --radius-md: 0.375rem;
@@ -224,6 +227,9 @@
224
227
  .bottom-0 {
225
228
  bottom: calc(var(--spacing) * 0);
226
229
  }
230
+ .bottom-4 {
231
+ bottom: calc(var(--spacing) * 4);
232
+ }
227
233
  .left-0 {
228
234
  left: calc(var(--spacing) * 0);
229
235
  }
@@ -236,6 +242,9 @@
236
242
  .z-20 {
237
243
  z-index: 20;
238
244
  }
245
+ .z-50 {
246
+ z-index: 50;
247
+ }
239
248
  .container {
240
249
  width: 100%;
241
250
  @media (width >= 40rem) {
@@ -293,6 +302,12 @@
293
302
  .inline-block {
294
303
  display: inline-block;
295
304
  }
305
+ .h-1 {
306
+ height: calc(var(--spacing) * 1);
307
+ }
308
+ .h-4 {
309
+ height: calc(var(--spacing) * 4);
310
+ }
296
311
  .h-5 {
297
312
  height: calc(var(--spacing) * 5);
298
313
  }
@@ -317,6 +332,9 @@
317
332
  .min-h-0 {
318
333
  min-height: calc(var(--spacing) * 0);
319
334
  }
335
+ .w-4 {
336
+ width: calc(var(--spacing) * 4);
337
+ }
320
338
  .w-5 {
321
339
  width: calc(var(--spacing) * 5);
322
340
  }
@@ -482,6 +500,9 @@
482
500
  .bg-gray-200 {
483
501
  background-color: var(--color-gray-200);
484
502
  }
503
+ .bg-green-700 {
504
+ background-color: var(--color-green-700);
505
+ }
485
506
  .bg-red-100 {
486
507
  background-color: var(--color-red-100);
487
508
  }
@@ -491,6 +512,12 @@
491
512
  .bg-white {
492
513
  background-color: var(--color-white);
493
514
  }
515
+ .bg-white\/5 {
516
+ background-color: color-mix(in srgb, #fff 5%, transparent);
517
+ @supports (color: color-mix(in lab, red, red)) {
518
+ background-color: color-mix(in oklab, var(--color-white) 5%, transparent);
519
+ }
520
+ }
494
521
  .object-cover {
495
522
  object-fit: cover;
496
523
  }
@@ -506,6 +533,9 @@
506
533
  .p-4 {
507
534
  padding: calc(var(--spacing) * 4);
508
535
  }
536
+ .px-1 {
537
+ padding-inline: calc(var(--spacing) * 1);
538
+ }
509
539
  .px-2 {
510
540
  padding-inline: calc(var(--spacing) * 2);
511
541
  }
@@ -578,6 +608,10 @@
578
608
  --tw-font-weight: var(--font-weight-medium);
579
609
  font-weight: var(--font-weight-medium);
580
610
  }
611
+ .font-semibold {
612
+ --tw-font-weight: var(--font-weight-semibold);
613
+ font-weight: var(--font-weight-semibold);
614
+ }
581
615
  .tracking-wide {
582
616
  --tw-tracking: var(--tracking-wide);
583
617
  letter-spacing: var(--tracking-wide);
@@ -615,9 +649,15 @@
615
649
  .text-red-800 {
616
650
  color: var(--color-red-800);
617
651
  }
652
+ .text-white {
653
+ color: var(--color-white);
654
+ }
618
655
  .capitalize {
619
656
  text-transform: capitalize;
620
657
  }
658
+ .accent-green-700 {
659
+ accent-color: var(--color-green-700);
660
+ }
621
661
  .shadow-md {
622
662
  --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
623
663
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
@@ -638,6 +678,10 @@
638
678
  --tw-duration: 200ms;
639
679
  transition-duration: 200ms;
640
680
  }
681
+ .select-none {
682
+ -webkit-user-select: none;
683
+ user-select: none;
684
+ }
641
685
  .hover\:border-blue-500 {
642
686
  &:hover {
643
687
  @media (hover: hover) {
@@ -666,6 +710,13 @@
666
710
  }
667
711
  }
668
712
  }
713
+ .hover\:bg-green-800 {
714
+ &:hover {
715
+ @media (hover: hover) {
716
+ background-color: var(--color-green-800);
717
+ }
718
+ }
719
+ }
669
720
  .hover\:bg-red-200 {
670
721
  &:hover {
671
722
  @media (hover: hover) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAKrD,QAAA,MAAM,YAAY,GAAI,OAAO,qBAAqB,4CAejD,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAOrD,QAAA,MAAM,YAAY,GAAI,OAAO,qBAAqB,4CAqBjD,CAAC;AAEF,eAAe,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,18 +1,54 @@
1
1
  "use client";
2
2
  "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
3
36
  var __importDefault = (this && this.__importDefault) || function (mod) {
4
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
38
  };
6
39
  Object.defineProperty(exports, "__esModule", { value: true });
7
40
  const jsx_runtime_1 = require("react/jsx-runtime");
8
- const react_1 = __importDefault(require("react"));
41
+ const react_1 = __importStar(require("react"));
9
42
  const maplibre_1 = require("react-map-gl/maplibre");
10
43
  const map_1 = __importDefault(require("./components/map"));
11
44
  const constants_1 = require("./static/constants");
12
45
  const use_layers_1 = require("./hooks/use-layers");
46
+ const dualMap_1 = __importDefault(require("./components/dualMap"));
47
+ const LayerCompareControl_1 = __importDefault(require("./components/Handler/LayerCompareControl"));
13
48
  // setup({ preflight: false });
14
49
  const MapListIndex = (props) => {
50
+ const [compareLayer, setCompareLayer] = (0, react_1.useState)(false);
15
51
  const mp = react_1.default.useMemo(() => ({ ...constants_1.defaultNakshaProps, ...props }), [props]);
16
- return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(maplibre_1.MapProvider, { children: (0, jsx_runtime_1.jsx)(use_layers_1.LayersProvider, { mp: mp, children: (0, jsx_runtime_1.jsx)(map_1.default, {}) }) }) }));
52
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(maplibre_1.MapProvider, { children: (0, jsx_runtime_1.jsxs)(use_layers_1.LayersProvider, { mp: mp, children: [(0, jsx_runtime_1.jsx)(LayerCompareControl_1.default, { compare: compareLayer, setCompare: setCompareLayer }), compareLayer ? (0, jsx_runtime_1.jsx)(dualMap_1.default, {}) : (0, jsx_runtime_1.jsx)(map_1.default, {})] }) }) }));
17
53
  };
18
54
  exports.default = MapListIndex;
@@ -1 +1 @@
1
- {"version":3,"file":"naksha.d.ts","sourceRoot":"","sources":["../../src/services/naksha.ts"],"names":[],"mappings":"AAkOA,eAAO,MAAM,oBAAoB,GAC/B,qBAAqB,MAAM,GAAG,IAAI,GAAG,SAAS,EAC9C,mBAAmB,MAAM,EACzB,WAAW,GAAG,EACd,iBAAiB,MAAM,EAAE,GAAG,IAAI,KAC/B,OAAO,CAAC,GAAG,EAAE,CAiBf,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,GACvC,IAAI,MAAM,GAAG,MAAM,EACnB,UAAU,MAAM,KACf,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,CAU3D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,GACvC,UAAU,MAAM,EAChB,WAAW,MAAM,EACjB,QAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAC1B,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,GAAG,EAAE,CAAA;CAAE,CAuBxE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAClC,qBAAqB,MAAM,GAAG,IAAI,GAAG,SAAS,EAC9C,mBAAmB,MAAM,EACzB,SAAS,MAAM,GAAG,MAAM,EACxB,UAAU,OAAO,KAChB,OAAO,CAAC,OAAO,CAoBjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GACxB,qBAAqB,MAAM,GAAG,IAAI,GAAG,SAAS,EAC9C,mBAAmB,MAAM,EACzB,SAAS,MAAM,GAAG,MAAM,KACvB,OAAO,CAAC,OAAO,CAejB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GACnC,WAAW,MAAM,EACjB,WAAW,MAAM,EACjB,WAAW,MAAM,EACjB,UAAU,MAAM,KACf,OAAO,CAAC,GAAG,CAcb,CAAC;AAEF;;;;GAIG;AAEH,eAAO,MAAM,gBAAgB,GAC3B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,EACtD,QAAQ;IAAE,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EAChF,MAAM,MAAM,EACZ,iBAAY,EACZ,oBAAsB,KACrB,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,GAAG,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB,CA0DA,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,EAChB,OAAO,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,WAAW,MAAM,EACjB,YAAY,MAAM,KACjB,OAAO,CAAC,IAAI,CAed,CAAC"}
1
+ {"version":3,"file":"naksha.d.ts","sourceRoot":"","sources":["../../src/services/naksha.ts"],"names":[],"mappings":"AAoOA,eAAO,MAAM,oBAAoB,GAC/B,qBAAqB,MAAM,GAAG,IAAI,GAAG,SAAS,EAC9C,mBAAmB,MAAM,EACzB,WAAW,GAAG,EACd,iBAAiB,MAAM,EAAE,GAAG,IAAI,KAC/B,OAAO,CAAC,GAAG,EAAE,CAwBf,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,GACvC,IAAI,MAAM,GAAG,MAAM,EACnB,UAAU,MAAM,KACf,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,CAY3D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,GACvC,UAAU,MAAM,EAChB,WAAW,MAAM,EACjB,QAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAC1B,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,GAAG,EAAE,CAAA;CAAE,CAuBxE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAClC,qBAAqB,MAAM,GAAG,IAAI,GAAG,SAAS,EAC9C,mBAAmB,MAAM,EACzB,SAAS,MAAM,GAAG,MAAM,EACxB,UAAU,OAAO,KAChB,OAAO,CAAC,OAAO,CAoBjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GACxB,qBAAqB,MAAM,GAAG,IAAI,GAAG,SAAS,EAC9C,mBAAmB,MAAM,EACzB,SAAS,MAAM,GAAG,MAAM,KACvB,OAAO,CAAC,OAAO,CAejB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GACnC,WAAW,MAAM,EACjB,WAAW,MAAM,EACjB,WAAW,MAAM,EACjB,UAAU,MAAM,KACf,OAAO,CAAC,GAAG,CAiBb,CAAC;AAEF;;;;GAIG;AAEH,eAAO,MAAM,gBAAgB,GAC3B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,EACtD,QAAQ;IAAE,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EAChF,MAAM,MAAM,EACZ,iBAAY,EACZ,oBAAsB,KACrB,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,GAAG,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB,CA0DA,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,EAChB,OAAO,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,WAAW,MAAM,EACjB,YAAY,MAAM,KACjB,OAAO,CAAC,IAAI,CAed,CAAC"}
@@ -7,6 +7,7 @@ exports.axDownloadLayer = exports.getGridLayerData = exports.axGetGeoserverLayer
7
7
  // api.ts
8
8
  const colorbrewer_1 = __importDefault(require("colorbrewer"));
9
9
  const grid_1 = require("../utils/grid");
10
+ const naksha_1 = require("../utils/naksha");
10
11
  /**
11
12
  * Inline-typed alias for colorbrewer palettes to avoid TS errors.
12
13
  * colorbrewer exports an object of shape: Record<schemeName, Record<count, string[]>>
@@ -150,7 +151,7 @@ function createDummyLayers(layersResponse, geoserver, selectedLayers) {
150
151
  // workspace and layerName parsing from rawName (workspace:layer)
151
152
  const [workspace = (geoserver?.workspace || "default"), layerName] = String(rawName).includes(":") ? String(rawName).split(":") : [geoserver?.workspace || "default", String(rawName)];
152
153
  // prefer API id if present, else create stable hash
153
- const id = entry.id || stableHashInt(String(rawName));
154
+ const id = entry.id;
154
155
  // Dummy bbox (keeps UI layout stable)
155
156
  const bbox = [
156
157
  [75 + idx * 0.01, 23 + idx * 0.01],
@@ -163,7 +164,8 @@ function createDummyLayers(layersResponse, geoserver, selectedLayers) {
163
164
  : `${gsBase}/thumbnails/${workspace}/${layerName}?layers=${encodeURIComponent(layerName)}&bbox=${bbox
164
165
  .flat()
165
166
  .join(",")}&request=GetMap&service=WMS&version=1.1.0&format=image/gif`;
166
- const layerType = (entry.dataType || entry.layerType || "Vector").toUpperCase();
167
+ // const layerType = (entry.dataType || entry.layerType || "Vector").toUpperCase();
168
+ const layerType = ("vector").toUpperCase();
167
169
  const titleCandidate = entry.nameOfDataset || layerName || entry.title || entry.geoserverName;
168
170
  const title = prettifyTitle(String(titleCandidate || rawName));
169
171
  return {
@@ -212,7 +214,8 @@ const axGetGeoserverLayers = async (nakshaEndpointToken, nakshaApiEndpoint, geos
212
214
  throw new Error(`HTTP ${res.status} ${res.statusText}`);
213
215
  // parseResponse may be your existing helper — if not, use res.json()
214
216
  const data = typeof parseResponse === "function" ? await parseResponse(res) : await res.json().catch(() => null);
215
- const finalLayers = createDummyLayers(data, geoserver, selectedLayers);
217
+ const finalTransformedLayers = createDummyLayers(data, geoserver, selectedLayers);
218
+ const finalLayers = await (0, naksha_1.parseGeoserverLayersXml)(finalTransformedLayers, nakshaApiEndpoint, geoserver, selectedLayers);
216
219
  return finalLayers;
217
220
  }
218
221
  catch (e) {
@@ -227,7 +230,8 @@ exports.axGetGeoserverLayers = axGetGeoserverLayers;
227
230
  */
228
231
  const axGetGeoserverLayerStyleList = async (id, endpoint) => {
229
232
  try {
230
- const res = await fetch(`${endpoint}/layer/onClick/${id}`);
233
+ const res = await fetch(`${endpoint}/styles/by-layer/${id}`);
234
+ // const res = await fetch(`${endpoint}/layer/onClick/${id}`);
231
235
  if (!res.ok)
232
236
  throw new Error(`HTTP ${res.status}`);
233
237
  const data = await parseResponse(res);
@@ -321,7 +325,9 @@ exports.axDeleteLayer = axDeleteLayer;
321
325
  */
322
326
  const axGetGeoserverLayerStyle = async (layername, workspace, styleName, endpoint) => {
323
327
  try {
324
- const res = await fetch(`${endpoint}/geoserver/workspaces/${workspace}/styles/${layername}_${styleName}.mbstyle`);
328
+ const res = await fetch(
329
+ // `${endpoint}/geoserver/workspaces/${workspace}/styles/${layername}_${styleName}.mbstyle`
330
+ `${endpoint}/styles/legend/${styleName}`);
325
331
  if (!res.ok)
326
332
  throw new Error(`HTTP ${res.status}`);
327
333
  // .mbstyle may be JSON; attempt parse safely
@@ -1 +1 @@
1
- {"version":3,"file":"naksha.d.ts","sourceRoot":"","sources":["../../src/utils/naksha.ts"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,GAClC,QAAQ,GAAG,EACX,mBAAmB,MAAM,EACzB,WAAW;IAAE,QAAQ,CAAC,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,GAAG,CAAC;CAAE,EAC9C,gBAAgB,GAAG,mBAsDpB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa,GACxB,OAAO;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;CAAE,EACjC,YAAY,MAAM,EAClB,mBAAmB,MAAM,EACzB,WAAW;IAAE,SAAS,EAAE,MAAM,CAAC;CAAE,iBAoFlC,CAAC"}
1
+ {"version":3,"file":"naksha.d.ts","sourceRoot":"","sources":["../../src/utils/naksha.ts"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,GAClC,QAAQ,GAAG,EACX,mBAAmB,MAAM,EACzB,WAAW;IAAE,QAAQ,CAAC,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,GAAG,CAAA;CAAE,EAC7C,gBAAgB,GAAG,mBAoDpB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa,GACxB,OAAO;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAChC,YAAY,MAAM,EAClB,mBAAmB,MAAM,EACzB,WAAW;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,iBAsGjC,CAAC"}
@@ -26,13 +26,13 @@ const parseGeoserverLayersXml = async (layers, nakshaApiEndpoint, geoserver, sel
26
26
  : "vector";
27
27
  const _l = {
28
28
  ...l,
29
- id: l.name,
29
+ id: l.id,
30
30
  thumbnail,
31
31
  source: {
32
32
  type: sourceType,
33
33
  scheme: "tms",
34
34
  tiles: [
35
- `${geoserver.endpoint.replace(/\/$/, "")}/gwc/service/tms/1.0.0/${encodeURIComponent(`${geoserver.workspace}:${l.name}`)}@EPSG%3A900913@pbf/{z}/{x}/{y}.pbf`,
35
+ `${geoserver.endpoint.replace(/\/$/, "")}/gwc/service/tms/1.0.0/${encodeURIComponent(`${geoserver.workspace}:${l.name}`)}@EPSG:3857@pbf/{z}/{x}/{y}.pbf`,
36
36
  ],
37
37
  },
38
38
  data: { styles: [] },
@@ -71,9 +71,11 @@ exports.parseGeoserverLayersXml = parseGeoserverLayersXml;
71
71
  * @returns {Promise<any>} updated data object
72
72
  */
73
73
  const getLayerStyle = async (layer, styleIndex, nakshaApiEndpoint, geoserver) => {
74
- console.log("getLayerStyle", layer, styleIndex, nakshaApiEndpoint, geoserver);
74
+ // console.log("getLayerStyle", layer , styleIndex , nakshaApiEndpoint , geoserver)
75
75
  // Start from existing data (defensive)
76
- let data = layer.data && typeof layer.data === "object" ? { ...layer.data } : { styles: [] };
76
+ let data = layer.data && typeof layer.data === "object"
77
+ ? { ...layer.data }
78
+ : { styles: [] };
77
79
  // 1) If styles list is empty, fetch style list and metadata
78
80
  if (!Array.isArray(data.styles) || data.styles.length === 0) {
79
81
  try {
@@ -89,7 +91,10 @@ const getLayerStyle = async (layer, styleIndex, nakshaApiEndpoint, geoserver) =>
89
91
  };
90
92
  // build propertyMap safely
91
93
  try {
92
- data.propertyMap = Object.fromEntries((data.styles || []).map((o) => [o.styleName, o.styleTitle]));
94
+ data.propertyMap = Object.fromEntries((data.styles || []).map((o) => [
95
+ o.styleName,
96
+ o.styleTitle,
97
+ ]));
93
98
  }
94
99
  catch {
95
100
  data.propertyMap = data.propertyMap ?? {};
@@ -117,7 +122,9 @@ const getLayerStyle = async (layer, styleIndex, nakshaApiEndpoint, geoserver) =>
117
122
  }
118
123
  if (needsColors || !styleExists) {
119
124
  // determine styleName to fetch colors for; prefer newly-fetched styles metadata if present
120
- const styleName = (data.styles && data.styles[styleIndex] && data.styles[styleIndex].styleName) ||
125
+ const styleName = (data.styles &&
126
+ data.styles[styleIndex] &&
127
+ data.styles[styleIndex].styleName) ||
121
128
  null;
122
129
  if (styleName) {
123
130
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metastringfoundation/map-list",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "sideEffects": [
5
5
  "**/*.css"
6
6
  ],
@@ -44,7 +44,7 @@
44
44
  "react-tiny-popover": "^8.1.6",
45
45
  "react-virtualized-auto-sizer": "^1.0.26",
46
46
  "react-web-share": "^2.0.2",
47
- "@metastringfoundation/map-common": "0.1.0"
47
+ "@metastringfoundation/map-common": "0.1.1"
48
48
  },
49
49
  "scripts": {
50
50
  "build:styles": "tailwindcss -i ./src/styles.css -o ./dist/index.css",