@geoql/v-maplibre 1.3.0 → 1.5.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.
@@ -0,0 +1,166 @@
1
+ import type { Color } from '@deck.gl/core';
2
+ interface Props {
3
+ id: string;
4
+ /**
5
+ * GeoTIFF source - URL string, ArrayBuffer, Blob, or geotiff.js instance
6
+ */
7
+ geotiff: string | ArrayBuffer | Blob | object;
8
+ /**
9
+ * Tile size in pixels
10
+ */
11
+ tileSize?: number;
12
+ /**
13
+ * Maximum zoom level
14
+ */
15
+ maxZoom?: number;
16
+ /**
17
+ * Minimum zoom level
18
+ */
19
+ minZoom?: number;
20
+ /**
21
+ * Maximum number of tiles to cache
22
+ */
23
+ maxCacheSize?: number;
24
+ /**
25
+ * Refinement strategy for tile loading
26
+ */
27
+ refinementStrategy?: 'best-available' | 'no-overlap' | 'never';
28
+ /**
29
+ * Maximum concurrent requests
30
+ */
31
+ maxRequests?: number;
32
+ /**
33
+ * Layer opacity (0-1)
34
+ */
35
+ opacity?: number;
36
+ /**
37
+ * Layer visibility
38
+ */
39
+ visible?: boolean;
40
+ /**
41
+ * Enable picking on this layer
42
+ */
43
+ pickable?: boolean;
44
+ /**
45
+ * Auto highlight on hover
46
+ */
47
+ autoHighlight?: boolean;
48
+ /**
49
+ * Highlight color when autoHighlight is enabled
50
+ */
51
+ highlightColor?: Color;
52
+ /**
53
+ * Insert layer before this layer id
54
+ */
55
+ beforeId?: string;
56
+ /**
57
+ * Show debug overlay on tiles
58
+ */
59
+ debug?: boolean;
60
+ /**
61
+ * Opacity of debug overlay (0-1)
62
+ */
63
+ debugOpacity?: number;
64
+ }
65
+ declare var __VLS_1: {};
66
+ type __VLS_Slots = {} & {
67
+ default?: (props: typeof __VLS_1) => any;
68
+ };
69
+ declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
70
+ click: (info: {
71
+ color: Uint8Array | null;
72
+ layer: import("@deck.gl/core").Layer | null;
73
+ sourceLayer?: import("@deck.gl/core").Layer | null;
74
+ viewport?: import("@deck.gl/core").Viewport;
75
+ index: number;
76
+ picked: boolean;
77
+ object?: any;
78
+ x: number;
79
+ y: number;
80
+ pixel?: [number, number];
81
+ coordinate?: number[];
82
+ devicePixel?: [number, number];
83
+ pixelRatio: number;
84
+ }) => any;
85
+ hover: (info: {
86
+ color: Uint8Array | null;
87
+ layer: import("@deck.gl/core").Layer | null;
88
+ sourceLayer?: import("@deck.gl/core").Layer | null;
89
+ viewport?: import("@deck.gl/core").Viewport;
90
+ index: number;
91
+ picked: boolean;
92
+ object?: any;
93
+ x: number;
94
+ y: number;
95
+ pixel?: [number, number];
96
+ coordinate?: number[];
97
+ devicePixel?: [number, number];
98
+ pixelRatio: number;
99
+ }) => any;
100
+ geotiffLoad: (tiff: unknown, options: {
101
+ geographicBounds: {
102
+ west: number;
103
+ south: number;
104
+ east: number;
105
+ north: number;
106
+ };
107
+ }) => any;
108
+ }, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
109
+ onClick?: ((info: {
110
+ color: Uint8Array | null;
111
+ layer: import("@deck.gl/core").Layer | null;
112
+ sourceLayer?: import("@deck.gl/core").Layer | null;
113
+ viewport?: import("@deck.gl/core").Viewport;
114
+ index: number;
115
+ picked: boolean;
116
+ object?: any;
117
+ x: number;
118
+ y: number;
119
+ pixel?: [number, number];
120
+ coordinate?: number[];
121
+ devicePixel?: [number, number];
122
+ pixelRatio: number;
123
+ }) => any) | undefined;
124
+ onHover?: ((info: {
125
+ color: Uint8Array | null;
126
+ layer: import("@deck.gl/core").Layer | null;
127
+ sourceLayer?: import("@deck.gl/core").Layer | null;
128
+ viewport?: import("@deck.gl/core").Viewport;
129
+ index: number;
130
+ picked: boolean;
131
+ object?: any;
132
+ x: number;
133
+ y: number;
134
+ pixel?: [number, number];
135
+ coordinate?: number[];
136
+ devicePixel?: [number, number];
137
+ pixelRatio: number;
138
+ }) => any) | undefined;
139
+ onGeotiffLoad?: ((tiff: unknown, options: {
140
+ geographicBounds: {
141
+ west: number;
142
+ south: number;
143
+ east: number;
144
+ north: number;
145
+ };
146
+ }) => any) | undefined;
147
+ }>, {
148
+ debug: boolean;
149
+ opacity: number;
150
+ pickable: boolean;
151
+ visible: boolean;
152
+ tileSize: number;
153
+ autoHighlight: boolean;
154
+ minZoom: number;
155
+ refinementStrategy: "best-available" | "no-overlap" | "never";
156
+ maxRequests: number;
157
+ debugOpacity: number;
158
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
159
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
160
+ declare const _default: typeof __VLS_export;
161
+ export default _default;
162
+ type __VLS_WithSlots<T, S> = T & {
163
+ new (): {
164
+ $slots: S;
165
+ };
166
+ };
@@ -0,0 +1 @@
1
+ export { default as VLayerDeckglCOG } from './VLayerDeckglCOG.vue';
@@ -30,6 +30,9 @@ export { VLayerDeckglQuadkey } from './quadkey';
30
30
  export { VLayerDeckglWMS } from './wms';
31
31
  export { VLayerDeckglSimpleMesh } from './simple-mesh';
32
32
  export { VLayerDeckglScenegraph } from './scenegraph';
33
+ export { VLayerDeckglCOG } from './cog';
34
+ export { VLayerDeckglWindParticle, WindParticleLayer, generateWindTexture, createWindDataFromOpenWeatherMap, } from './wind-particle';
35
+ export type { WindDataPoint, WindTextureResult, GenerateWindTextureOptions, ColorStop, } from './wind-particle';
33
36
  export { VLayerDeckgl } from './generic';
34
37
  export { useDeckOverlay, useDeckLayers, DeckOverlayKey, DeckLayersKey, } from './_shared';
35
38
  export * from './_shared/types';
@@ -22,10 +22,18 @@ interface Props<D = unknown> {
22
22
  sizeUnits?: 'meters' | 'common' | 'pixels';
23
23
  sizeMinPixels?: number;
24
24
  sizeMaxPixels?: number;
25
+ characterSet?: string | string[];
25
26
  fontFamily?: string;
26
27
  fontWeight?: string | number;
27
28
  lineHeight?: number;
28
- fontSettings?: object;
29
+ fontSettings?: {
30
+ sdf?: boolean;
31
+ fontSize?: number;
32
+ buffer?: number;
33
+ radius?: number;
34
+ cutoff?: number;
35
+ smoothing?: number;
36
+ };
29
37
  wordBreak?: 'break-all' | 'break-word';
30
38
  maxWidth?: number;
31
39
  outlineWidth?: number;
@@ -115,9 +123,18 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
115
123
  sizeUnits: "meters" | "common" | "pixels";
116
124
  sizeMinPixels: number;
117
125
  sizeMaxPixels: number;
126
+ characterSet: string | string[];
118
127
  fontFamily: string;
119
128
  fontWeight: string | number;
120
129
  lineHeight: number;
130
+ fontSettings: {
131
+ sdf?: boolean;
132
+ fontSize?: number;
133
+ buffer?: number;
134
+ radius?: number;
135
+ cutoff?: number;
136
+ smoothing?: number;
137
+ };
121
138
  wordBreak: "break-all" | "break-word";
122
139
  maxWidth: number;
123
140
  outlineWidth: number;
@@ -0,0 +1,120 @@
1
+ import type { ColorStop, WindDataPoint } from 'maplibre-gl-wind';
2
+ import type { Color } from '../_shared/types';
3
+ interface Props {
4
+ id: string;
5
+ imageUrl?: string;
6
+ windData?: WindDataPoint[];
7
+ bounds?: [number, number, number, number];
8
+ uMin?: number;
9
+ uMax?: number;
10
+ vMin?: number;
11
+ vMax?: number;
12
+ numParticles?: number;
13
+ maxAge?: number;
14
+ speedFactor?: number;
15
+ color?: Color;
16
+ colorRamp?: ColorStop[];
17
+ speedRange?: [number, number];
18
+ width?: number;
19
+ animate?: boolean;
20
+ opacity?: number;
21
+ visible?: boolean;
22
+ pickable?: boolean;
23
+ beforeId?: string;
24
+ }
25
+ declare var __VLS_1: {};
26
+ type __VLS_Slots = {} & {
27
+ default?: (props: typeof __VLS_1) => any;
28
+ };
29
+ declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
30
+ click: (info: {
31
+ color: Uint8Array | null;
32
+ layer: import("@deck.gl/core").Layer | null;
33
+ sourceLayer?: import("@deck.gl/core").Layer | null;
34
+ viewport?: import("@deck.gl/core").Viewport;
35
+ index: number;
36
+ picked: boolean;
37
+ object?: any;
38
+ x: number;
39
+ y: number;
40
+ pixel?: [number, number];
41
+ coordinate?: number[];
42
+ devicePixel?: [number, number];
43
+ pixelRatio: number;
44
+ }) => any;
45
+ error: (error: Error) => any;
46
+ hover: (info: {
47
+ color: Uint8Array | null;
48
+ layer: import("@deck.gl/core").Layer | null;
49
+ sourceLayer?: import("@deck.gl/core").Layer | null;
50
+ viewport?: import("@deck.gl/core").Viewport;
51
+ index: number;
52
+ picked: boolean;
53
+ object?: any;
54
+ x: number;
55
+ y: number;
56
+ pixel?: [number, number];
57
+ coordinate?: number[];
58
+ devicePixel?: [number, number];
59
+ pixelRatio: number;
60
+ }) => any;
61
+ loaded: () => any;
62
+ }, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
63
+ onClick?: ((info: {
64
+ color: Uint8Array | null;
65
+ layer: import("@deck.gl/core").Layer | null;
66
+ sourceLayer?: import("@deck.gl/core").Layer | null;
67
+ viewport?: import("@deck.gl/core").Viewport;
68
+ index: number;
69
+ picked: boolean;
70
+ object?: any;
71
+ x: number;
72
+ y: number;
73
+ pixel?: [number, number];
74
+ coordinate?: number[];
75
+ devicePixel?: [number, number];
76
+ pixelRatio: number;
77
+ }) => any) | undefined;
78
+ onError?: ((error: Error) => any) | undefined;
79
+ onHover?: ((info: {
80
+ color: Uint8Array | null;
81
+ layer: import("@deck.gl/core").Layer | null;
82
+ sourceLayer?: import("@deck.gl/core").Layer | null;
83
+ viewport?: import("@deck.gl/core").Viewport;
84
+ index: number;
85
+ picked: boolean;
86
+ object?: any;
87
+ x: number;
88
+ y: number;
89
+ pixel?: [number, number];
90
+ coordinate?: number[];
91
+ devicePixel?: [number, number];
92
+ pixelRatio: number;
93
+ }) => any) | undefined;
94
+ onLoaded?: (() => any) | undefined;
95
+ }>, {
96
+ width: number;
97
+ opacity: number;
98
+ pickable: boolean;
99
+ visible: boolean;
100
+ bounds: [number, number, number, number];
101
+ animate: boolean;
102
+ color: Color;
103
+ uMin: number;
104
+ uMax: number;
105
+ vMin: number;
106
+ vMax: number;
107
+ numParticles: number;
108
+ maxAge: number;
109
+ speedFactor: number;
110
+ colorRamp: ColorStop[];
111
+ speedRange: [number, number];
112
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
113
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
114
+ declare const _default: typeof __VLS_export;
115
+ export default _default;
116
+ type __VLS_WithSlots<T, S> = T & {
117
+ new (): {
118
+ $slots: S;
119
+ };
120
+ };
@@ -0,0 +1,3 @@
1
+ export { default as VLayerDeckglWindParticle } from './VLayerDeckglWindParticle.vue';
2
+ export { WindParticleLayer, generateWindTexture, createWindDataFromOpenWeatherMap, windUniforms, } from 'maplibre-gl-wind';
3
+ export type { WindParticleLayerProps, WindUniformProps, ColorStop, WindDataPoint, WindTextureResult, GenerateWindTextureOptions, } from 'maplibre-gl-wind';
@@ -6,4 +6,5 @@ export { VectorLayer as VLayerMaplibreVector } from './maplibre/vector';
6
6
  export { VideoLayer as VLayerMaplibreVideo } from './maplibre/video';
7
7
  export { PmtileLayer as VLayerMaplibrePmtile } from './maplibre/pmtile';
8
8
  export { ClusterLayer as VLayerMaplibreCluster } from './maplibre/cluster';
9
+ export { RouteLayer as VLayerMaplibreRoute } from './maplibre/route';
9
10
  export * from './deckgl';
@@ -0,0 +1,64 @@
1
+ interface RouteClick {
2
+ coordinates: {
3
+ lng: number;
4
+ lat: number;
5
+ };
6
+ }
7
+ interface Props {
8
+ /** Unique identifier for the route */
9
+ id?: string;
10
+ /** Array of [longitude, latitude] coordinate pairs defining the route */
11
+ coordinates: [number, number][];
12
+ /** Line color as CSS color value */
13
+ color?: string;
14
+ /** Line width in pixels */
15
+ width?: number;
16
+ /** Line opacity (0-1) */
17
+ opacity?: number;
18
+ /** Line cap style */
19
+ lineCap?: 'butt' | 'round' | 'square';
20
+ /** Line join style */
21
+ lineJoin?: 'bevel' | 'round' | 'miter';
22
+ /** Whether the route is visible */
23
+ visible?: boolean;
24
+ /** Whether the route is interactive (shows pointer cursor on hover) */
25
+ interactive?: boolean;
26
+ /** Render this layer before the specified layer */
27
+ before?: string;
28
+ /** Line dash array for dashed lines */
29
+ dashArray?: number[];
30
+ /** Line blur in pixels */
31
+ blur?: number;
32
+ }
33
+ declare var __VLS_1: {};
34
+ type __VLS_Slots = {} & {
35
+ default?: (props: typeof __VLS_1) => any;
36
+ };
37
+ declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
38
+ click: (event: RouteClick) => any;
39
+ mouseenter: () => any;
40
+ mouseleave: () => any;
41
+ }, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
42
+ onClick?: ((event: RouteClick) => any) | undefined;
43
+ onMouseenter?: (() => any) | undefined;
44
+ onMouseleave?: (() => any) | undefined;
45
+ }>, {
46
+ width: number;
47
+ id: string;
48
+ opacity: number;
49
+ before: string;
50
+ visible: boolean;
51
+ color: string;
52
+ lineCap: "butt" | "round" | "square";
53
+ lineJoin: "bevel" | "round" | "miter";
54
+ interactive: boolean;
55
+ blur: number;
56
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
57
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
58
+ declare const _default: typeof __VLS_export;
59
+ export default _default;
60
+ type __VLS_WithSlots<T, S> = T & {
61
+ new (): {
62
+ $slots: S;
63
+ };
64
+ };
@@ -0,0 +1 @@
1
+ export { default as RouteLayer } from './VLayerMaplibreRoute.vue';
@@ -6,7 +6,7 @@ type __VLS_Props = {
6
6
  cursor?: string;
7
7
  };
8
8
  declare var __VLS_1: {
9
- setRef: (el: HTMLElement) => void;
9
+ setRef: (el: HTMLElement | Element | null) => void;
10
10
  }, __VLS_9: {};
11
11
  type __VLS_Slots = {} & {
12
12
  markers?: (props: typeof __VLS_1) => any;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geoql/v-maplibre",
3
- "version": "1.3.0",
3
+ "version": "1.5.0",
4
4
  "description": "Vue 3 components for MapLibre GL - reactive map components with full TypeScript support",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -40,7 +40,10 @@
40
40
  "@deck.gl/aggregation-layers": "^9.2.5",
41
41
  "@deck.gl/geo-layers": "^9.2.5",
42
42
  "@deck.gl/mesh-layers": "^9.2.5",
43
- "maplibre-gl-lidar": "^0.5.0"
43
+ "@developmentseed/deck.gl-geotiff": "^0.1.0",
44
+ "geotiff-geokeys-to-proj4": "^2024.4.0",
45
+ "maplibre-gl-lidar": "^0.5.0",
46
+ "maplibre-gl-wind": "^0.2.0"
44
47
  },
45
48
  "peerDependenciesMeta": {
46
49
  "@deck.gl/core": {
@@ -61,8 +64,17 @@
61
64
  "@deck.gl/mesh-layers": {
62
65
  "optional": true
63
66
  },
67
+ "@developmentseed/deck.gl-geotiff": {
68
+ "optional": true
69
+ },
70
+ "geotiff-geokeys-to-proj4": {
71
+ "optional": true
72
+ },
64
73
  "maplibre-gl-lidar": {
65
74
  "optional": true
75
+ },
76
+ "maplibre-gl-wind": {
77
+ "optional": true
66
78
  }
67
79
  },
68
80
  "dependencies": {
@@ -70,20 +82,24 @@
70
82
  "pmtiles": "^4.3.2"
71
83
  },
72
84
  "devDependencies": {
85
+ "@awmottaz/prettier-plugin-void-html": "catalog:",
86
+ "@deck.gl/aggregation-layers": "catalog:deckgl",
73
87
  "@deck.gl/core": "catalog:deckgl",
88
+ "@deck.gl/geo-layers": "catalog:deckgl",
74
89
  "@deck.gl/layers": "catalog:deckgl",
75
90
  "@deck.gl/mapbox": "catalog:deckgl",
76
- "@deck.gl/aggregation-layers": "catalog:deckgl",
77
- "@deck.gl/geo-layers": "catalog:deckgl",
78
91
  "@deck.gl/mesh-layers": "catalog:deckgl",
79
- "maplibre-gl-lidar": "^0.5.0",
80
- "@awmottaz/prettier-plugin-void-html": "catalog:",
92
+ "@luma.gl/core": "^9.2.5",
93
+ "@luma.gl/engine": "^9.2.5",
94
+ "@luma.gl/shadertools": "^9.2.5",
81
95
  "@types/node": "^25.0.6",
82
96
  "@vitejs/plugin-vue": "^6.0.3",
83
97
  "@vitest/coverage-v8": "^4.0.16",
84
98
  "@vitest/ui": "^4.0.16",
85
99
  "@vue/test-utils": "^2.4.6",
86
100
  "happy-dom": "^20.1.0",
101
+ "maplibre-gl-lidar": "^0.5.0",
102
+ "maplibre-gl-wind": "^0.2.0",
87
103
  "oxlint": "catalog:",
88
104
  "prettier": "catalog:",
89
105
  "typescript": "catalog:",