@kispace-io/gs-lib 1.1.8 → 1.2.0

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 (61) hide show
  1. package/dist/base-map-builder.d.ts.map +1 -1
  2. package/dist/gs-model.d.ts +6 -0
  3. package/dist/gs-model.d.ts.map +1 -1
  4. package/dist/index.d.ts +3 -5
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +890 -288
  7. package/dist/index.js.map +1 -1
  8. package/dist/map-renderer.d.ts +94 -0
  9. package/dist/map-renderer.d.ts.map +1 -0
  10. package/dist/ml/gs-gs2ml.d.ts +96 -0
  11. package/dist/ml/gs-gs2ml.d.ts.map +1 -0
  12. package/dist/ml/gs-ml-adapters.d.ts +41 -0
  13. package/dist/ml/gs-ml-adapters.d.ts.map +1 -0
  14. package/dist/ml/gs-ml-lib.d.ts +17 -0
  15. package/dist/ml/gs-ml-lib.d.ts.map +1 -0
  16. package/dist/ml/gs-ml2gs.d.ts +10 -0
  17. package/dist/ml/gs-ml2gs.d.ts.map +1 -0
  18. package/dist/ml/gs-mlns.d.ts +10 -0
  19. package/dist/ml/gs-mlns.d.ts.map +1 -0
  20. package/dist/ml/index.d.ts +9 -0
  21. package/dist/ml/index.d.ts.map +1 -0
  22. package/dist/ml/maplibre-map-renderer.d.ts +66 -0
  23. package/dist/ml/maplibre-map-renderer.d.ts.map +1 -0
  24. package/dist/{gs-gs2ol.d.ts → ol/gs-gs2ol.d.ts} +2 -2
  25. package/dist/ol/gs-gs2ol.d.ts.map +1 -0
  26. package/dist/ol/gs-ol-adapters.d.ts.map +1 -0
  27. package/dist/{gs-lib.d.ts → ol/gs-ol-lib.d.ts} +4 -4
  28. package/dist/ol/gs-ol-lib.d.ts.map +1 -0
  29. package/dist/{gs-ol2gs.d.ts → ol/gs-ol2gs.d.ts} +1 -1
  30. package/dist/ol/gs-ol2gs.d.ts.map +1 -0
  31. package/dist/ol/gs-olns.d.ts.map +1 -0
  32. package/dist/ol/index.d.ts +9 -0
  33. package/dist/ol/index.d.ts.map +1 -0
  34. package/dist/ol/openlayers-map-renderer.d.ts +68 -0
  35. package/dist/ol/openlayers-map-renderer.d.ts.map +1 -0
  36. package/package.json +6 -2
  37. package/src/base-map-builder.ts +8 -9
  38. package/src/gs-model.ts +7 -1
  39. package/src/index.ts +12 -7
  40. package/src/map-renderer.ts +115 -0
  41. package/src/ml/gs-gs2ml.ts +717 -0
  42. package/src/ml/gs-ml-adapters.ts +134 -0
  43. package/src/ml/gs-ml-lib.ts +124 -0
  44. package/src/ml/gs-ml2gs.ts +66 -0
  45. package/src/ml/gs-mlns.ts +50 -0
  46. package/src/ml/index.ts +41 -0
  47. package/src/ml/maplibre-map-renderer.ts +428 -0
  48. package/src/{gs-gs2ol.ts → ol/gs-gs2ol.ts} +10 -4
  49. package/src/{gs-lib.ts → ol/gs-ol-lib.ts} +7 -6
  50. package/src/{gs-ol2gs.ts → ol/gs-ol2gs.ts} +1 -1
  51. package/src/ol/index.ts +21 -0
  52. package/src/ol/openlayers-map-renderer.ts +719 -0
  53. package/dist/gs-gs2ol.d.ts.map +0 -1
  54. package/dist/gs-lib.d.ts.map +0 -1
  55. package/dist/gs-ol-adapters.d.ts.map +0 -1
  56. package/dist/gs-ol2gs.d.ts.map +0 -1
  57. package/dist/gs-olns.d.ts.map +0 -1
  58. /package/dist/{gs-ol-adapters.d.ts → ol/gs-ol-adapters.d.ts} +0 -0
  59. /package/dist/{gs-olns.d.ts → ol/gs-olns.d.ts} +0 -0
  60. /package/src/{gs-ol-adapters.ts → ol/gs-ol-adapters.ts} +0 -0
  61. /package/src/{gs-olns.ts → ol/gs-olns.ts} +0 -0
@@ -0,0 +1,94 @@
1
+ import { GsMap, GsLayer, GsControl, GsOverlay } from './gs-model';
2
+ /**
3
+ * Sync event types that describe what changed in the map
4
+ */
5
+ export type MapSyncEvent = {
6
+ type: 'viewChanged';
7
+ view: {
8
+ center: [number, number];
9
+ zoom: number;
10
+ rotation?: number;
11
+ pitch?: number;
12
+ bearing?: number;
13
+ };
14
+ } | {
15
+ type: 'featuresChanged';
16
+ layerUuid: string;
17
+ features: any[];
18
+ } | {
19
+ type: 'featureSelected';
20
+ layerUuid: string;
21
+ feature: any;
22
+ metrics?: {
23
+ length?: number;
24
+ area?: number;
25
+ };
26
+ } | {
27
+ type: 'featureDeselected';
28
+ } | {
29
+ type: 'drawingDisabled';
30
+ };
31
+ /**
32
+ * Screenshot result from captureScreenshot
33
+ */
34
+ export type ScreenshotResult = {
35
+ success: true;
36
+ dataUrl: string;
37
+ width: number;
38
+ height: number;
39
+ } | {
40
+ success: false;
41
+ error: string;
42
+ };
43
+ /**
44
+ * Abstract interface for map rendering
45
+ * The host app only knows about this interface and the GsMap domain model
46
+ *
47
+ * This interface is focused purely on rendering and map state management.
48
+ * For operations, use MapOperations interface instead.
49
+ */
50
+ export interface MapRenderer {
51
+ render(container: string | HTMLElement): Promise<void>;
52
+ reattached?(): Promise<void>;
53
+ modelToUI(updatedGsMap?: GsMap): Promise<void>;
54
+ getViewExtent(): Promise<number[]>;
55
+ getOperations(): MapOperations;
56
+ setOnDirty(callback: () => void): void;
57
+ triggerDirty(): void;
58
+ setOnSync(callback: (event: MapSyncEvent) => void): void;
59
+ triggerSync(event: MapSyncEvent): void;
60
+ setOnClick?(callback: () => void): void;
61
+ captureScreenshot(): Promise<ScreenshotResult>;
62
+ destroy(): void;
63
+ }
64
+ export declare function findLayerByUuid(gsMap: GsMap, uuid: string): GsLayer | undefined;
65
+ export declare function findLayerIndexByUuid(gsMap: GsMap, uuid: string): number;
66
+ export declare function findControlByUuid(gsMap: GsMap, uuid: string): GsControl | undefined;
67
+ export declare function findControlIndexByUuid(gsMap: GsMap, uuid: string): number;
68
+ export declare function findOverlayByUuid(gsMap: GsMap, uuid: string): GsOverlay | undefined;
69
+ export declare function findOverlayIndexByUuid(gsMap: GsMap, uuid: string): number;
70
+ /**
71
+ * Map operations interface for high-level map commands
72
+ * These operations work with the domain model and are framework-agnostic
73
+ */
74
+ export interface MapOperations {
75
+ setZoom(zoom: number): Promise<void>;
76
+ setCenter(center: [number, number]): Promise<void>;
77
+ switchColorMode(mode?: 'dark' | 'light'): Promise<void>;
78
+ addLayer(layer: any, isBasemap?: boolean): Promise<void>;
79
+ deleteLayer(uuid: string): Promise<void>;
80
+ renameLayer(uuid: string, newName: string): Promise<void>;
81
+ moveLayer(uuid: string, targetUuid?: string): Promise<void>;
82
+ setLayerVisible(uuid: string, visible: boolean): Promise<void>;
83
+ addControlFromModule(src: string): Promise<void>;
84
+ removeControl(uuid: string): Promise<void>;
85
+ addOverlayFromModule(src: string, position?: string): Promise<void>;
86
+ removeOverlay(uuid: string): Promise<void>;
87
+ enableDrawing(geometryType: 'Point' | 'LineString' | 'Polygon', layerUuid: string): Promise<void>;
88
+ disableDrawing(): Promise<void>;
89
+ enableFeatureSelection(): Promise<void>;
90
+ disableSelection(): Promise<void>;
91
+ deleteSelectedFeatures(): Promise<void>;
92
+ }
93
+ export declare const createProxy: (operations: MapOperations[]) => MapOperations;
94
+ //# sourceMappingURL=map-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-renderer.d.ts","sourceRoot":"","sources":["../src/map-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,YAAY,GAClB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE;QAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC9H;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,GAAG,EAAE,CAAA;CAAE,GAC/D;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,GAAG,CAAC;IAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC1G;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAElC;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACtB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IACxB,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,SAAS,CAAC,YAAY,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACnC,aAAa,IAAI,aAAa,CAAC;IAC/B,UAAU,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACvC,YAAY,IAAI,IAAI,CAAC;IACrB,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI,CAAC;IACzD,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACvC,UAAU,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACxC,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC/C,OAAO,IAAI,IAAI,CAAC;CACnB;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAE/E;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEnF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEnF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAE1B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,SAAS,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGnD,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGxD,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAG/D,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAG3C,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAG3C,aAAa,CAAC,YAAY,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAGhC,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED,eAAO,MAAM,WAAW,GAAI,YAAY,aAAa,EAAE,KAAG,aAWzD,CAAA"}
@@ -0,0 +1,96 @@
1
+ import { Map, StyleSpecification, LayerSpecification, SourceSpecification } from 'maplibre-gl';
2
+ import { GsMlControl, GsMlOverlayAdapter } from './gs-ml-adapters';
3
+ import { GsMap, GsLayer, GsSource, GsFeature, GsStyle } from '../gs-model';
4
+ export declare const ML_KEY_GS_LAYER_UUID = "gs-layer-uuid";
5
+ export declare const ML_KEY_GS_SOURCE_UUID = "gs-source-uuid";
6
+ export declare const EPSG_3857 = "EPSG:3857";
7
+ export declare const EPSG_4326 = "EPSG:4326";
8
+ /**
9
+ * Convert coordinates to EPSG:4326 (WGS84)
10
+ * MapLibre uses WGS84 (lon/lat in degrees)
11
+ * Uses proj4js for accurate coordinate transformation
12
+ *
13
+ * @param coords - Source coordinates
14
+ * @param sourceProjection - Source projection (default: EPSG:3857)
15
+ */
16
+ export declare function toWgs84(coords: [number, number], sourceProjection?: string): [number, number];
17
+ /**
18
+ * Convert coordinates to EPSG:3857 (Web Mercator)
19
+ * GsMap stores coordinates in Web Mercator (meters)
20
+ * Uses proj4js for accurate coordinate transformation
21
+ *
22
+ * @param coords - Source coordinates
23
+ * @param sourceProjection - Source projection (default: EPSG:4326)
24
+ */
25
+ export declare function toWebMercator(coords: [number, number], sourceProjection?: string): [number, number];
26
+ /**
27
+ * Generic coordinate transformation between any two projections
28
+ * Uses proj4js for accurate coordinate transformation
29
+ *
30
+ * @param coords - Source coordinates
31
+ * @param fromProjection - Source projection
32
+ * @param toProjection - Target projection
33
+ */
34
+ export declare function transformCoords(coords: [number, number], fromProjection: string, toProjection: string): [number, number];
35
+ /**
36
+ * Convert GsFeature to GeoJSON Feature (with coordinate conversion to WGS84)
37
+ */
38
+ /**
39
+ * Convert GsFeature to GeoJSON Feature (with coordinate conversion to WGS84)
40
+ *
41
+ * @param feature - GsFeature to convert
42
+ * @param sourceProjection - Source projection of coordinates (default: EPSG:3857)
43
+ */
44
+ export declare function toGeoJsonFeature(feature: GsFeature, sourceProjection?: string): GeoJSON.Feature;
45
+ /**
46
+ * Convert array of GsFeatures to GeoJSON FeatureCollection
47
+ */
48
+ /**
49
+ * Convert array of GsFeatures to GeoJSON FeatureCollection
50
+ *
51
+ * @param features - Array of GsFeatures
52
+ * @param sourceProjection - Source projection of coordinates (default: EPSG:3857)
53
+ */
54
+ export declare function toGeoJsonFeatureCollection(features: GsFeature[], sourceProjection?: string): GeoJSON.FeatureCollection;
55
+ /**
56
+ * Convert GsSource to MapLibre SourceSpecification
57
+ */
58
+ export declare function toMlSource(source: GsSource, _layer?: GsLayer): SourceSpecification | null;
59
+ /**
60
+ * Convert GsStyle to MapLibre paint properties for fill layers
61
+ */
62
+ export declare function toMlFillPaint(style?: GsStyle): Record<string, any>;
63
+ /**
64
+ * Convert GsStyle to MapLibre paint properties for line layers
65
+ */
66
+ export declare function toMlLinePaint(style?: GsStyle): Record<string, any>;
67
+ /**
68
+ * Convert GsStyle to MapLibre paint properties for circle layers
69
+ */
70
+ export declare function toMlCirclePaint(style?: GsStyle): Record<string, any>;
71
+ /**
72
+ * Convert GsStyle to MapLibre paint properties for fill-extrusion layers (3D buildings)
73
+ * Uses data-driven styling to get height and color from feature properties
74
+ */
75
+ export declare function toMlFillExtrusionPaint(style?: GsStyle): Record<string, any>;
76
+ /**
77
+ * Convert GsLayer to MapLibre LayerSpecification(s)
78
+ * Returns an array because vector layers may need multiple MapLibre layers
79
+ * (one for each geometry type: fill, line, circle, fill-extrusion)
80
+ */
81
+ export declare function toMlLayers(layer: GsLayer, sourceId: string, defaultStyle?: GsStyle): LayerSpecification[];
82
+ /**
83
+ * Build initial MapLibre style from GsMap
84
+ */
85
+ export declare function buildInitialStyle(gsMap: GsMap): StyleSpecification;
86
+ export type MlImporter = (src: string) => Promise<any>;
87
+ export declare const DefaultMlImporter: MlImporter;
88
+ /**
89
+ * Import and initialize a control module for MapLibre
90
+ */
91
+ export declare function importMlControlSource(map: Map, control: GsMlControl, src: string, env?: any, importer?: MlImporter): Promise<void>;
92
+ /**
93
+ * Import and initialize an overlay module for MapLibre
94
+ */
95
+ export declare function importMlOverlaySource(map: Map, adapter: GsMlOverlayAdapter, src: string, env?: any, importer?: MlImporter): Promise<void>;
96
+ //# sourceMappingURL=gs-gs2ml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gs-gs2ml.d.ts","sourceRoot":"","sources":["../../src/ml/gs-gs2ml.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { Map, IControl } from 'maplibre-gl';
2
+ /**
3
+ * MapLibre Control adapter for user modules
4
+ */
5
+ export declare class GsMlControlAdapter {
6
+ private map;
7
+ private container;
8
+ private templateFunction?;
9
+ constructor(map: Map);
10
+ getMap(): Map;
11
+ getElement(): HTMLElement;
12
+ render(strings?: TemplateStringsArray | Function): void;
13
+ style(styleJson: any): void;
14
+ }
15
+ /**
16
+ * MapLibre IControl wrapper for user modules
17
+ */
18
+ export declare class GsMlControl implements IControl {
19
+ private adapter;
20
+ constructor(_position?: string);
21
+ onAdd(map: Map): HTMLElement;
22
+ onRemove(): void;
23
+ getAdapter(): GsMlControlAdapter;
24
+ }
25
+ /**
26
+ * MapLibre Overlay adapter using Popup
27
+ */
28
+ export declare class GsMlOverlayAdapter {
29
+ private map;
30
+ private popup;
31
+ private container;
32
+ private templateFunction?;
33
+ constructor(map: Map);
34
+ getMap(): Map;
35
+ getElement(): HTMLElement;
36
+ render(strings?: TemplateStringsArray | Function): void;
37
+ style(styleJson: any): void;
38
+ show(coords: number[]): void;
39
+ hide(): void;
40
+ }
41
+ //# sourceMappingURL=gs-ml-adapters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gs-ml-adapters.d.ts","sourceRoot":"","sources":["../../src/ml/gs-ml-adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAS,QAAQ,EAAc,MAAM,aAAa,CAAC;AAG/D;;GAEG;AACH,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,gBAAgB,CAAC,CAAW;gBAExB,GAAG,EAAE,GAAG;IAOpB,MAAM,IAAI,GAAG;IAIb,UAAU,IAAI,WAAW;IAIzB,MAAM,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,QAAQ;IAYhD,KAAK,CAAC,SAAS,EAAE,GAAG;CAOvB;AAED;;GAEG;AACH,qBAAa,WAAY,YAAW,QAAQ;IACxC,OAAO,CAAC,OAAO,CAAqB;gBAExB,SAAS,CAAC,EAAE,MAAM;IAI9B,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,WAAW;IAK5B,QAAQ,IAAI,IAAI;IAIhB,UAAU,IAAI,kBAAkB;CAGnC;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,gBAAgB,CAAC,CAAW;gBAExB,GAAG,EAAE,GAAG;IAcpB,MAAM,IAAI,GAAG;IAIb,UAAU,IAAI,WAAW;IAIzB,MAAM,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,QAAQ;IAYhD,KAAK,CAAC,SAAS,EAAE,GAAG;IAQpB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE;IAMrB,IAAI;CAIP"}
@@ -0,0 +1,17 @@
1
+ import { GsMap } from '../gs-model';
2
+ import { Map } from 'maplibre-gl';
3
+ import { MlImporter } from './gs-gs2ml';
4
+ export * from '../gs-model';
5
+ export * from './gs-gs2ml';
6
+ export interface MlLibOptions {
7
+ containerSelector: string | HTMLElement;
8
+ gsMap: GsMap;
9
+ env?: any;
10
+ modules?: any;
11
+ importer?: MlImporter;
12
+ }
13
+ /**
14
+ * Main entry point to create a MapLibre map from GsMap
15
+ */
16
+ export declare function mlLib(options: MlLibOptions): Promise<Map>;
17
+ //# sourceMappingURL=gs-ml-lib.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gs-ml-lib.d.ts","sourceRoot":"","sources":["../../src/ml/gs-ml-lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAC;AAClC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,EACH,GAAG,EAGN,MAAM,aAAa,CAAC;AACrB,OAAO,EAMH,UAAU,EACb,MAAM,YAAY,CAAC;AAOpB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAE3B,MAAM,WAAW,YAAY;IACzB,iBAAiB,EAAE,MAAM,GAAG,WAAW,CAAC;IACxC,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,QAAQ,CAAC,EAAE,UAAU,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAuF/D"}
@@ -0,0 +1,10 @@
1
+ import { GsFeature, GsGeometry } from '../gs-model';
2
+ /**
3
+ * Convert GeoJSON geometry to GsGeometry (with coordinate conversion to EPSG:3857)
4
+ */
5
+ export declare function toGsGeometry(geometry: GeoJSON.Geometry): GsGeometry;
6
+ /**
7
+ * Convert MapLibre/GeoJSON feature to GsFeature (with coordinate conversion to EPSG:3857)
8
+ */
9
+ export declare function toGsFeature(feature: GeoJSON.Feature): GsFeature;
10
+ //# sourceMappingURL=gs-ml2gs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gs-ml2gs.d.ts","sourceRoot":"","sources":["../../src/ml/gs-ml2gs.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,SAAS,EACT,UAAU,EAIb,MAAM,aAAa,CAAC;AAuBrB;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,GAAG,UAAU,CAWnE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,SAAS,CAgB/D"}
@@ -0,0 +1,10 @@
1
+ import { default as maplibregl } from 'maplibre-gl';
2
+ /**
3
+ * MapLibre library re-exports
4
+ * Centralized re-exports for MapLibre to provide a single source of truth.
5
+ */
6
+ export { Map, Marker, Popup, NavigationControl, GeolocateControl, ScaleControl, FullscreenControl, AttributionControl, LngLat, LngLatBounds, Point, MercatorCoordinate } from 'maplibre-gl';
7
+ export type { MapOptions, StyleSpecification, LayerSpecification, SourceSpecification, GeoJSONSourceSpecification, RasterSourceSpecification, VectorSourceSpecification, MapMouseEvent, MapLayerMouseEvent, IControl, MarkerOptions, PopupOptions, LngLatLike, LngLatBoundsLike, PointLike, FitBoundsOptions, CameraOptions, AnimationOptions, ExpressionSpecification, FilterSpecification } from 'maplibre-gl';
8
+ export { maplibregl };
9
+ export default maplibregl;
10
+ //# sourceMappingURL=gs-mlns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gs-mlns.d.ts","sourceRoot":"","sources":["../../src/ml/gs-mlns.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACH,GAAG,EACH,MAAM,EACN,KAAK,EACL,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,MAAM,EACN,YAAY,EACZ,KAAK,EACL,kBAAkB,EACrB,MAAM,aAAa,CAAC;AAGrB,YAAY,EACR,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,aAAa,EACb,kBAAkB,EAClB,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACtB,MAAM,aAAa,CAAC;AAGrB,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,eAAe,UAAU,CAAC"}
@@ -0,0 +1,9 @@
1
+ export * from '../gs-model';
2
+ export * from '../map-renderer';
3
+ export * from './gs-ml-lib';
4
+ export * from './gs-ml2gs';
5
+ export * from './gs-ml-adapters';
6
+ export { toGeoJsonFeature, toGeoJsonFeatureCollection, toMlSource, toMlLayers, toMlFillPaint, toMlLinePaint, toMlCirclePaint, toMlFillExtrusionPaint, buildInitialStyle, toWgs84, toWebMercator, transformCoords, EPSG_3857, EPSG_4326, importMlControlSource, importMlOverlaySource, ML_KEY_GS_LAYER_UUID, ML_KEY_GS_SOURCE_UUID, type MlImporter } from './gs-gs2ml';
7
+ export * as ml from './gs-mlns';
8
+ export { MapLibreMapRenderer } from './maplibre-map-renderer';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ml/index.ts"],"names":[],"mappings":"AAIA,cAAc,aAAa,CAAA;AAG3B,cAAc,iBAAiB,CAAA;AAG/B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,OAAO,EACH,gBAAgB,EAChB,0BAA0B,EAC1B,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,OAAO,EACP,aAAa,EACb,eAAe,EACf,SAAS,EACT,SAAS,EACT,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,UAAU,EAClB,MAAM,YAAY,CAAA;AAGnB,OAAO,KAAK,EAAE,MAAM,WAAW,CAAA;AAG/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA"}
@@ -0,0 +1,66 @@
1
+ import { MapOperations, MapRenderer, MapSyncEvent, ScreenshotResult } from '../map-renderer';
2
+ import { GsMap } from '../gs-model';
3
+ import { Map } from 'maplibre-gl';
4
+ /**
5
+ * MapLibre map renderer that implements the MapRenderer interface
6
+ */
7
+ export declare class MapLibreMapRenderer implements MapRenderer {
8
+ private map?;
9
+ private gsMap;
10
+ private env?;
11
+ private onDirtyCallback?;
12
+ private onSyncCallback?;
13
+ private isDestroyed;
14
+ private operations?;
15
+ constructor(gsMap: GsMap, env?: any);
16
+ reattached(): Promise<void>;
17
+ render(container: string | HTMLElement): Promise<void>;
18
+ modelToUI(updatedGsMap?: GsMap): Promise<void>;
19
+ getOperations(): MapOperations;
20
+ getViewExtent(): Promise<number[]>;
21
+ captureScreenshot(): Promise<ScreenshotResult>;
22
+ setOnDirty(callback: () => void): void;
23
+ setOnSync(callback: (event: MapSyncEvent) => void): void;
24
+ triggerDirty(): void;
25
+ triggerSync(event: MapSyncEvent): void;
26
+ private syncViewToModel;
27
+ syncLayerFeaturesToModel(layerUuid: string): void;
28
+ private setupEventListeners;
29
+ getMap(): Map | undefined;
30
+ getGsMap(): GsMap;
31
+ destroy(): void;
32
+ }
33
+ /**
34
+ * MapLibre-specific map operations implementation
35
+ */
36
+ export declare class MapLibreMapOperations implements MapOperations {
37
+ private map;
38
+ private renderer;
39
+ private selectedFeatureId?;
40
+ private selectedLayerId?;
41
+ private drawMode?;
42
+ private clickHandler?;
43
+ private keyHandler?;
44
+ constructor(map: Map, renderer: MapLibreMapRenderer);
45
+ setZoom(zoom: number): Promise<void>;
46
+ setCenter(center: [number, number]): Promise<void>;
47
+ switchColorMode(mode?: 'dark' | 'light'): Promise<void>;
48
+ addLayer(layer: any, isBasemap?: boolean): Promise<void>;
49
+ private getFirstLayerId;
50
+ deleteLayer(uuid: string): Promise<void>;
51
+ renameLayer(_uuid: string, _newName: string): Promise<void>;
52
+ moveLayer(uuid: string, targetUuid?: string): Promise<void>;
53
+ setLayerVisible(uuid: string, visible: boolean): Promise<void>;
54
+ addControlFromModule(_src: string): Promise<void>;
55
+ removeControl(_uuid: string): Promise<void>;
56
+ addOverlayFromModule(_src: string, _position?: string): Promise<void>;
57
+ removeOverlay(_uuid: string): Promise<void>;
58
+ enableDrawing(geometryType: 'Point' | 'LineString' | 'Polygon', layerUuid: string): Promise<void>;
59
+ private addFeatureToLayer;
60
+ disableDrawing(): Promise<void>;
61
+ enableFeatureSelection(): Promise<void>;
62
+ disableSelection(): Promise<void>;
63
+ deleteSelectedFeatures(): Promise<void>;
64
+ cleanup(): void;
65
+ }
66
+ //# sourceMappingURL=maplibre-map-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maplibre-map-renderer.d.ts","sourceRoot":"","sources":["../../src/ml/maplibre-map-renderer.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { GsControl, GsFeature, GsFillStyle, GsGeometry, GsIcon, GsImageStyle, GsLayer, GsMap, GsOverlay, GsSource, GsStrokeStyle, GsStyle, GsTextStyle } from './gs-model';
1
+ import { GsControl, GsFeature, GsFillStyle, GsGeometry, GsIcon, GsImageStyle, GsLayer, GsMap, GsOverlay, GsSource, GsStrokeStyle, GsStyle, GsTextStyle } from '../gs-model';
2
2
  import { Feature, Map, Overlay } from 'ol';
3
3
  import { MapOptions } from 'ol/Map';
4
4
  import { Circle as CircleStyle, Fill, Icon, RegularShape, Stroke, Style, Text } from 'ol/style';
@@ -37,5 +37,5 @@ export declare const importControlSource: (olControl: GsOlControl, src: string,
37
37
  export type Importer = (src: string) => Promise<any>;
38
38
  export declare const DefaultImporter: Importer;
39
39
  export declare const cleanupEventSubscriptions: (olMap: Map) => void;
40
- export declare const toOlMap: (gsMap: GsMap, options?: MapOptions, env?: any, importer?: Importer) => Promise<Map>;
40
+ export declare const toOlMap: (gsMap: GsMap, options?: MapOptions, env?: any, importer?: Importer, target?: HTMLElement) => Promise<Map>;
41
41
  //# sourceMappingURL=gs-gs2ol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gs-gs2ol.d.ts","sourceRoot":"","sources":["../../src/ol/gs-gs2ol.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,SAAS,EACT,SAAS,EACT,WAAW,EACX,UAAU,EACV,MAAM,EACN,YAAY,EACZ,OAAO,EAEP,KAAK,EACL,SAAS,EACT,QAAQ,EAGR,aAAa,EACb,OAAO,EACP,WAAW,EAYd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAO,MAAM,IAAI,CAAC;AAC/C,OAAO,EAAC,UAAU,EAAC,MAAM,QAAQ,CAAC;AAElC,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAClC,OAAO,EAAC,MAAM,IAAI,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAC,MAAM,UAAU,CAAC;AAO9F,OAAO,SAAS,MAAM,eAAe,CAAC;AACtC,OAAO,UAAU,MAAM,gBAAgB,CAAC;AAExC,OAAO,SAAS,MAAM,eAAe,CAAC;AAGtC,OAAO,EAAC,OAAO,EAAC,MAAM,YAAY,CAAC;AAwBnC,eAAO,MAAM,YAAY,GAAI,UAAU,UAAU,6JAEhD,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,UAAU,MAAM,SAI5C,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,UAAU,aAAa,KAAG,MASpD,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,QAAQ,WAAW,KAAG,IAI9C,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,SAAS,YAAY,KAAG,WAWvD,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,SAAS,YAAY,KAAG,IAsBrD,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,SAAS,YAAY,KAAG,YAc7D,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,SAAS,YAAY,KAAG,WAAW,GAAG,IAAI,GAAG,YAWtE,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,QAAQ,WAAW,KAAG,IAuB9C,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,SAAS,OAAO,KAAG,KAwB5C,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,SAAS,SAAS,KAAG,OAIhD,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,GAAQ,CAAA;AAoHjC,eAAO,MAAM,UAAU,GAAI,QAAQ,QAAQ,EAAE,UAAU,SAAS,CAAC,UAAU,CAAC,QAE3E,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,GAAQ,CAAA;AAmBhC,eAAO,MAAM,SAAS,GAAI,OAAO,OAAO,cAOvC,CAAA;AAED,qBAAa,WAAY,SAAQ,OAAO;gBACxB,OAAO,CAAC,EAAE,GAAG;IAUlB,UAAU;CAGpB;AAED,qBAAa,WAAY,SAAQ,OAAO;gBACxB,OAAO,CAAC,EAAE,GAAG;IASlB,UAAU;CAGpB;AAED,eAAO,MAAM,WAAW,GAAI,SAAS,SAAS,gBAO7C,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,SAAS,SAAS,gBAI7C,CAAA;AAqKD,eAAO,MAAM,mBAAmB,GAAU,WAAW,WAAW,EAAE,KAAK,MAAM,EAAE,WAAW,QAAQ,kBAGjG,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAU,WAAW,WAAW,EAAE,KAAK,MAAM,EAAE,WAAW,QAAQ,kBAGjG,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;AACpD,eAAO,MAAM,eAAe,EAAE,QAAuC,CAAA;AAErE,eAAO,MAAM,yBAAyB,GAAI,OAAO,GAAG,KAAG,IAMtD,CAAA;AAED,eAAO,MAAM,OAAO,GAAU,OAAO,KAAK,EAAE,UAAU,UAAU,EAAE,MAAM,GAAG,EAAE,WAAW,QAAQ,EAAE,SAAS,WAAW,iBAgCrH,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gs-ol-adapters.d.ts","sourceRoot":"","sources":["../../src/ol/gs-ol-adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,IAAI,CAAC;AACvB,OAAO,EAAC,WAAW,EAAE,WAAW,EAAC,MAAM,YAAY,CAAC;AAGpD,qBAAa,WAAW,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IACxD,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;IACnB,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEtB,OAAO,CAAC,gBAAgB,CAAC,CAAW;IACpC,SAAS,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;gBAExB,QAAQ,EAAE,CAAC;IAKhB,MAAM,IAAI,GAAG;IAIb,UAAU;IAIV,MAAM,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,QAAQ;IAYvD,SAAS,CAAC,UAAU;IAGb,KAAK,CAAC,SAAS,EAAE,GAAG;CAO9B;AAED,qBAAa,gBAAiB,SAAQ,WAAW,CAAC,WAAW,CAAC;IACnD,KAAK,CAAC,SAAS,EAAE,GAAG;IAQpB,QAAQ;CAoBlB;AAED,qBAAa,gBAAiB,SAAQ,WAAW,CAAC,WAAW,CAAC;IACnD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE;IAKrB,IAAI;CAGd"}
@@ -1,6 +1,6 @@
1
1
  import { Importer } from './gs-gs2ol';
2
- import { GsMap } from './gs-model';
3
- export * from './gs-model';
2
+ import { GsMap } from '../gs-model';
3
+ export * from '../gs-model';
4
4
  export * from './gs-gs2ol';
5
5
  export interface GsAppOptions {
6
6
  containerSelector: string | HTMLElement;
@@ -12,5 +12,5 @@ export interface GsAppOptions {
12
12
  controls: any;
13
13
  };
14
14
  }
15
- export declare const gsLib: (options: GsAppOptions) => Promise<import('ol').Map>;
16
- //# sourceMappingURL=gs-lib.d.ts.map
15
+ export declare const olLib: (options: GsAppOptions) => Promise<import('ol').Map>;
16
+ //# sourceMappingURL=gs-ol-lib.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gs-ol-lib.d.ts","sourceRoot":"","sources":["../../src/ol/gs-ol-lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,QAAQ,EAAC,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAC;AAClC,OAAO,WAAW,CAAC;AAInB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAE3B,MAAM,WAAW,YAAY;IACzB,iBAAiB,EAAE,MAAM,GAAG,WAAW,CAAC;IACxC,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,UAAU,CAAC,EAAE;QACT,QAAQ,EAAE,GAAG,CAAA;KAChB,CAAA;CACJ;AAED,eAAO,MAAM,KAAK,GAAU,SAAS,YAAY,8BAiChD,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { Feature } from 'ol';
2
- import { GsFeature, GsGeometry, GsLayerType, GsSourceType } from './gs-model';
2
+ import { GsFeature, GsGeometry, GsLayerType, GsSourceType } from '../gs-model';
3
3
  import * as olGeom from "ol/geom";
4
4
  export declare const toGsLayerType: (tag: string) => GsLayerType;
5
5
  export declare const toGsSourceType: (tag: string) => GsSourceType;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gs-ol2gs.d.ts","sourceRoot":"","sources":["../../src/ol/gs-ol2gs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,IAAI,CAAC;AAC3B,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAClC,OAAO,EACH,SAAS,EACT,UAAU,EACV,WAAW,EACX,YAAY,EAIf,MAAM,aAAa,CAAC;AAGrB,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,gBAgBxC,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,iBAUzC,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,YAAY,YAAY,oGAMnD,CAAA;AAuBD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,cAAc,GAAG,UAAU,CAKxE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,aAI3C"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gs-olns.d.ts","sourceRoot":"","sources":["../../src/ol/gs-olns.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAa,IAAI,CAAC;AAClB,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,KAAK,KAAK,MAAM,UAAU,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,UAAU,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,KAAK,MAAM,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,eAAe,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAE,KAAK,IAAI,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAG5D,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export * from '../gs-model';
2
+ export * from '../map-renderer';
3
+ export * from './gs-gs2ol';
4
+ export * from './gs-ol2gs';
5
+ export * from './gs-ol-adapters';
6
+ export * from './gs-ol-lib';
7
+ export * from './gs-olns';
8
+ export { OpenLayersMapRenderer } from './openlayers-map-renderer';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ol/index.ts"],"names":[],"mappings":"AAIA,cAAc,aAAa,CAAA;AAG3B,cAAc,iBAAiB,CAAA;AAG/B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAG3B,cAAc,WAAW,CAAA;AAGzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA"}
@@ -0,0 +1,68 @@
1
+ import { MapOperations, MapRenderer, MapSyncEvent, ScreenshotResult } from '../map-renderer';
2
+ import { GsMap } from '../gs-model';
3
+ import { Map as OlMap } from './gs-olns';
4
+ /**
5
+ * OpenLayers map renderer that manages OpenLayers maps
6
+ * Provides complete isolation between the host app and the rendering engine
7
+ * User modules are handled by the toOlMap() function
8
+ */
9
+ export declare class OpenLayersMapRenderer implements MapRenderer {
10
+ olMap?: OlMap;
11
+ gsMap: GsMap;
12
+ private env?;
13
+ private onDirtyCallback?;
14
+ private onSyncCallback?;
15
+ private isDestroyed;
16
+ private operations?;
17
+ private styleCache;
18
+ constructor(gsMap: GsMap, env?: any);
19
+ reattached(): Promise<void>;
20
+ render(container: string | HTMLElement): Promise<void>;
21
+ private applyStylesToLayers;
22
+ private applyStyleToVectorLayer;
23
+ private clearStyleCache;
24
+ modelToUI(updatedGsMap?: GsMap): Promise<void>;
25
+ getOperations(): MapOperations;
26
+ getViewExtent(): Promise<number[]>;
27
+ captureScreenshot(): Promise<ScreenshotResult>;
28
+ setOnDirty(callback: () => void): void;
29
+ setOnSync(callback: (event: MapSyncEvent) => void): void;
30
+ triggerDirty(): void;
31
+ triggerSync(event: MapSyncEvent): void;
32
+ private syncViewToModel;
33
+ syncLayerFeaturesToModel(layerUuid: string): void;
34
+ private setupEventListeners;
35
+ destroy(): void;
36
+ }
37
+ /**
38
+ * OpenLayers-specific map operations implementation
39
+ */
40
+ export declare class OpenLayersMapOperations implements MapOperations {
41
+ private olMap;
42
+ private renderer?;
43
+ private drawInteraction?;
44
+ private selectInteraction?;
45
+ private activeDrawingLayerUuid?;
46
+ private keyDownListener?;
47
+ constructor(olMap: OlMap, renderer?: OpenLayersMapRenderer | undefined);
48
+ setZoom(zoom: number): Promise<void>;
49
+ setCenter(center: [number, number]): Promise<void>;
50
+ switchColorMode(mode?: 'dark' | 'light'): Promise<void>;
51
+ addLayer(layer: any, isBasemap?: boolean): Promise<void>;
52
+ deleteLayer(uuid: string): Promise<void>;
53
+ renameLayer(uuid: string, newName: string): Promise<void>;
54
+ moveLayer(uuid: string, targetUuid?: string): Promise<void>;
55
+ setLayerVisible(uuid: string, visible: boolean): Promise<void>;
56
+ addControlFromModule(_src: string): Promise<void>;
57
+ removeControl(_uuid: string): Promise<void>;
58
+ addOverlayFromModule(_src: string, _position?: string): Promise<void>;
59
+ removeOverlay(_uuid: string): Promise<void>;
60
+ private setCursor;
61
+ enableDrawing(geometryType: 'Point' | 'LineString' | 'Polygon', layerUuid: string): Promise<void>;
62
+ disableDrawing(): Promise<void>;
63
+ cleanup(): void;
64
+ enableFeatureSelection(): Promise<void>;
65
+ deleteSelectedFeatures(): Promise<void>;
66
+ disableSelection(): Promise<void>;
67
+ }
68
+ //# sourceMappingURL=openlayers-map-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openlayers-map-renderer.d.ts","sourceRoot":"","sources":["../../src/ol/openlayers-map-renderer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kispace-io/gs-lib",
3
- "version": "1.1.8",
3
+ "version": "1.2.0",
4
4
  "type": "module",
5
5
  "license": "EPL-2.0",
6
6
  "repository": {
@@ -33,7 +33,10 @@
33
33
  },
34
34
  "dependencies": {
35
35
  "ol": "10.7.0",
36
- "ol-mapbox-style": "13.1.1"
36
+ "ol-mapbox-style": "13.1.1",
37
+ "maplibre-gl": "^4.7.1",
38
+ "proj4": "^2.15.0",
39
+ "uuid": "^11.1.0"
37
40
  },
38
41
  "peerDependencies": {
39
42
  "@kispace-io/appspace": "^1.0.0",
@@ -44,6 +47,7 @@
44
47
  },
45
48
  "devDependencies": {
46
49
  "@types/node": "^24.9.2",
50
+ "@types/proj4": "^2.5.6",
47
51
  "@types/uuid": "^10.0.0",
48
52
  "typescript": "~5.9.3",
49
53
  "vite": "^7.1.12",
@@ -221,8 +221,13 @@ export async function bundleApp(
221
221
  }
222
222
  }
223
223
 
224
+ // Extract filename from path (works in both browser and Node.js)
225
+ const extractFilename = (filePath: string): string => {
226
+ const lastSlash = Math.max(filePath.lastIndexOf('/'), filePath.lastIndexOf('\\'))
227
+ return lastSlash >= 0 ? filePath.substring(lastSlash + 1) : filePath
228
+ }
229
+
224
230
  // Write output files and find the main entry file and CSS (fallback if metafile didn't work)
225
- const path = await import('path')
226
231
  for (const file of result.outputFiles) {
227
232
  let filePath = file.path || ''
228
233
 
@@ -233,11 +238,11 @@ export async function bundleApp(
233
238
 
234
239
  if (filePath.startsWith('/') || (filePath.length > 2 && filePath[1] === ':')) {
235
240
  // Absolute path - extract filename and build relative path
236
- filename = path.basename(filePath)
241
+ filename = extractFilename(filePath)
237
242
  relativePath = `${outputDir}/${filename}`
238
243
  } else {
239
244
  // Relative path - ensure it's under outputDir
240
- filename = path.basename(filePath)
245
+ filename = extractFilename(filePath)
241
246
  relativePath = filePath.startsWith(outputDir) ? filePath : `${outputDir}/${filePath}`
242
247
  }
243
248
 
@@ -257,12 +262,6 @@ export async function bundleApp(
257
262
  throw new Error('Could not find main output file')
258
263
  }
259
264
 
260
- // Extract filename from path (handle both / and \ separators)
261
- const extractFilename = (filePath: string): string => {
262
- const lastSlash = Math.max(filePath.lastIndexOf('/'), filePath.lastIndexOf('\\'))
263
- return lastSlash >= 0 ? filePath.substring(lastSlash + 1) : filePath
264
- }
265
-
266
265
  return {
267
266
  js: extractFilename(mainOutputFile),
268
267
  css: cssOutputFile ? extractFilename(cssOutputFile) : null
package/src/gs-model.ts CHANGED
@@ -136,7 +136,13 @@ export interface GsInteraction extends GsState {
136
136
  export interface GsView extends GsState {
137
137
  center: number[],
138
138
  zoom: number,
139
- projection: string
139
+ projection: string,
140
+ /** Camera pitch in degrees (0 = looking straight down, 60 = tilted view) */
141
+ pitch?: number,
142
+ /** Camera bearing/rotation in degrees (0 = north up) */
143
+ bearing?: number,
144
+ /** Map rotation in radians (OpenLayers) - deprecated, use bearing instead */
145
+ rotation?: number
140
146
  }
141
147
 
142
148
  export interface GsStrokeStyle {