@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
package/src/index.ts CHANGED
@@ -1,10 +1,10 @@
1
+ // Core exports - renderer-agnostic model and utilities
2
+ // For renderer-specific functionality, import from '@kispace-io/gs-lib/ol' or '@kispace-io/gs-lib/ml'
1
3
  export * from "./gs-model"
2
- export * from "./gs-gs2ol"
3
- export * from "./gs-ol2gs"
4
- export * from "./gs-ol-adapters"
5
- export * from "./gs-lib"
6
- // Re-export OpenLayers for convenience
7
- export * from "./gs-olns"
4
+
5
+ // Map renderer interface (no implementation)
6
+ export * from "./map-renderer"
7
+
8
8
  // map-builder is only used by build service - export explicitly to avoid tree-shaking issues
9
9
  export { buildMap, generateAppJs, processServiceWorker, processManifest, processHtml, bundleApp, type BuildOptions, type FileSystem, type GsLibFileCopier, type ProgressCallback } from "./base-map-builder"
10
10
 
@@ -12,4 +12,9 @@ export const rtUtils = {
12
12
  async resolveUrl(url: string) {
13
13
  return url
14
14
  }
15
- };
15
+ };
16
+
17
+ export * from "./ol/index"
18
+
19
+ // Backward compatibility: export olLib as gsLib for generated build code
20
+ export { olLib as gsLib } from "./ol/gs-ol-lib"
@@ -0,0 +1,115 @@
1
+ import { GsMap, GsLayer, GsControl, GsOverlay } from "./gs-model";
2
+
3
+ /**
4
+ * Sync event types that describe what changed in the map
5
+ */
6
+ export type MapSyncEvent =
7
+ | { type: 'viewChanged', view: { center: [number, number], zoom: number, rotation?: number, pitch?: number, bearing?: number } }
8
+ | { type: 'featuresChanged', layerUuid: string, features: any[] }
9
+ | { type: 'featureSelected', layerUuid: string, feature: any, metrics?: { length?: number, area?: number } }
10
+ | { type: 'featureDeselected' }
11
+ | { type: 'drawingDisabled' };
12
+
13
+ /**
14
+ * Screenshot result from captureScreenshot
15
+ */
16
+ export type ScreenshotResult =
17
+ | { success: true, dataUrl: string, width: number, height: number }
18
+ | { success: false, error: string };
19
+
20
+ /**
21
+ * Abstract interface for map rendering
22
+ * The host app only knows about this interface and the GsMap domain model
23
+ *
24
+ * This interface is focused purely on rendering and map state management.
25
+ * For operations, use MapOperations interface instead.
26
+ */
27
+ export interface MapRenderer {
28
+ render(container: string | HTMLElement): Promise<void>;
29
+ reattached?(): Promise<void>;
30
+ modelToUI(updatedGsMap?: GsMap): Promise<void>;
31
+ getViewExtent(): Promise<number[]>;
32
+ getOperations(): MapOperations;
33
+ setOnDirty(callback: () => void): void;
34
+ triggerDirty(): void;
35
+ setOnSync(callback: (event: MapSyncEvent) => void): void;
36
+ triggerSync(event: MapSyncEvent): void;
37
+ setOnClick?(callback: () => void): void;
38
+ captureScreenshot(): Promise<ScreenshotResult>;
39
+ destroy(): void;
40
+ }
41
+
42
+ export function findLayerByUuid(gsMap: GsMap, uuid: string): GsLayer | undefined {
43
+ return gsMap.layers.find(layer => layer.uuid === uuid);
44
+ }
45
+
46
+ export function findLayerIndexByUuid(gsMap: GsMap, uuid: string): number {
47
+ return gsMap.layers.findIndex(layer => layer.uuid === uuid);
48
+ }
49
+
50
+ export function findControlByUuid(gsMap: GsMap, uuid: string): GsControl | undefined {
51
+ return gsMap.controls.find(control => control.uuid === uuid);
52
+ }
53
+
54
+ export function findControlIndexByUuid(gsMap: GsMap, uuid: string): number {
55
+ return gsMap.controls.findIndex(control => control.uuid === uuid);
56
+ }
57
+
58
+ export function findOverlayByUuid(gsMap: GsMap, uuid: string): GsOverlay | undefined {
59
+ return gsMap.overlays.find(overlay => overlay.uuid === uuid);
60
+ }
61
+
62
+ export function findOverlayIndexByUuid(gsMap: GsMap, uuid: string): number {
63
+ return gsMap.overlays.findIndex(overlay => overlay.uuid === uuid);
64
+ }
65
+
66
+ /**
67
+ * Map operations interface for high-level map commands
68
+ * These operations work with the domain model and are framework-agnostic
69
+ */
70
+ export interface MapOperations {
71
+ // View operations
72
+ setZoom(zoom: number): Promise<void>;
73
+ setCenter(center: [number, number]): Promise<void>;
74
+
75
+ // Display operations
76
+ switchColorMode(mode?: 'dark' | 'light'): Promise<void>;
77
+
78
+ // Layer operations
79
+ addLayer(layer: any, isBasemap?: boolean): Promise<void>;
80
+ deleteLayer(uuid: string): Promise<void>;
81
+ renameLayer(uuid: string, newName: string): Promise<void>;
82
+ moveLayer(uuid: string, targetUuid?: string): Promise<void>;
83
+ setLayerVisible(uuid: string, visible: boolean): Promise<void>;
84
+
85
+ // Control operations
86
+ addControlFromModule(src: string): Promise<void>;
87
+ removeControl(uuid: string): Promise<void>;
88
+
89
+ // Overlay operations
90
+ addOverlayFromModule(src: string, position?: string): Promise<void>;
91
+ removeOverlay(uuid: string): Promise<void>;
92
+
93
+ // Drawing operations (UI-only, no domain model changes until features are added)
94
+ enableDrawing(geometryType: 'Point' | 'LineString' | 'Polygon', layerUuid: string): Promise<void>;
95
+ disableDrawing(): Promise<void>;
96
+
97
+ // Feature selection and deletion
98
+ enableFeatureSelection(): Promise<void>;
99
+ disableSelection(): Promise<void>;
100
+ deleteSelectedFeatures(): Promise<void>;
101
+ }
102
+
103
+ export const createProxy = (operations: MapOperations[]): MapOperations => {
104
+ return new Proxy({}, {
105
+ get: (_, prop: string) => {
106
+ return async (...args: any[]) => {
107
+ // Execute the operation on all registered operations
108
+ for (const operation of operations) {
109
+ await (operation as any)[prop](...args);
110
+ }
111
+ };
112
+ }
113
+ }) as MapOperations;
114
+ }
115
+