@fieldia/map 0.0.0-stage → 0.14.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.
- package/LICENSE +21 -0
- package/README.md +91 -2
- package/package.json +37 -3
- package/src/index.d.mts +6 -0
- package/src/index.d.ts +6 -0
- package/src/index.js +22 -0
- package/src/index.js.map +1 -0
- package/src/index.mjs +6 -0
- package/src/index.mjs.map +1 -0
- package/src/lib/area.d.mts +3 -0
- package/src/lib/area.d.ts +3 -0
- package/src/lib/area.js +591 -0
- package/src/lib/area.js.map +1 -0
- package/src/lib/area.mjs +588 -0
- package/src/lib/area.mjs.map +1 -0
- package/src/lib/geo.d.mts +72 -0
- package/src/lib/geo.d.ts +72 -0
- package/src/lib/geo.js +149 -0
- package/src/lib/geo.js.map +1 -0
- package/src/lib/geo.mjs +134 -0
- package/src/lib/geo.mjs.map +1 -0
- package/src/lib/kinds.d.mts +35 -0
- package/src/lib/kinds.d.ts +35 -0
- package/src/lib/kinds.js +127 -0
- package/src/lib/kinds.js.map +1 -0
- package/src/lib/kinds.mjs +124 -0
- package/src/lib/kinds.mjs.map +1 -0
- package/src/lib/labels.d.mts +58 -0
- package/src/lib/labels.d.ts +58 -0
- package/src/lib/labels.js +214 -0
- package/src/lib/labels.js.map +1 -0
- package/src/lib/labels.mjs +209 -0
- package/src/lib/labels.mjs.map +1 -0
- package/src/lib/leaflet-css.d.mts +2 -0
- package/src/lib/leaflet-css.d.ts +2 -0
- package/src/lib/leaflet-css.js +34 -0
- package/src/lib/leaflet-css.js.map +1 -0
- package/src/lib/leaflet-css.mjs +31 -0
- package/src/lib/leaflet-css.mjs.map +1 -0
- package/src/lib/leaflet.d.mts +15 -0
- package/src/lib/leaflet.d.ts +15 -0
- package/src/lib/leaflet.js +76 -0
- package/src/lib/leaflet.js.map +1 -0
- package/src/lib/leaflet.mjs +72 -0
- package/src/lib/leaflet.mjs.map +1 -0
- package/src/lib/map-core.d.mts +47 -0
- package/src/lib/map-core.d.ts +47 -0
- package/src/lib/map-core.js +300 -0
- package/src/lib/map-core.js.map +1 -0
- package/src/lib/map-core.mjs +297 -0
- package/src/lib/map-core.mjs.map +1 -0
- package/src/lib/place.d.mts +3 -0
- package/src/lib/place.d.ts +3 -0
- package/src/lib/place.js +323 -0
- package/src/lib/place.js.map +1 -0
- package/src/lib/place.mjs +320 -0
- package/src/lib/place.mjs.map +1 -0
- package/src/lib/providers.d.mts +131 -0
- package/src/lib/providers.d.ts +131 -0
- package/src/lib/providers.js +224 -0
- package/src/lib/providers.js.map +1 -0
- package/src/lib/providers.mjs +217 -0
- package/src/lib/providers.mjs.map +1 -0
- package/src/lib/search-box.d.mts +28 -0
- package/src/lib/search-box.d.ts +28 -0
- package/src/lib/search-box.js +141 -0
- package/src/lib/search-box.js.map +1 -0
- package/src/lib/search-box.mjs +138 -0
- package/src/lib/search-box.mjs.map +1 -0
- package/src/lib/settings.d.mts +19 -0
- package/src/lib/settings.d.ts +19 -0
- package/src/lib/settings.js +3 -0
- package/src/lib/settings.js.map +1 -0
- package/src/lib/settings.mjs +2 -0
- package/src/lib/settings.mjs.map +1 -0
- package/src/lib/styles.d.mts +11 -0
- package/src/lib/styles.d.ts +11 -0
- package/src/lib/styles.js +127 -0
- package/src/lib/styles.js.map +1 -0
- package/src/lib/styles.mjs +122 -0
- package/src/lib/styles.mjs.map +1 -0
- package/src/lib/widgets.d.mts +14 -0
- package/src/lib/widgets.d.ts +14 -0
- package/src/lib/widgets.js +21 -0
- package/src/lib/widgets.js.map +1 -0
- package/src/lib/widgets.mjs +18 -0
- package/src/lib/widgets.mjs.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"place.js","sourceRoot":"","sources":["../../../../../libs/map/src/lib/place.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
import { asJson, isLatLng, parseCoordinate, readPoint, writePoint } from './geo.mjs';
|
|
2
|
+
import { mapLabels } from './labels.mjs';
|
|
3
|
+
import { createMapBox } from './map-core.mjs';
|
|
4
|
+
import { searchBox } from './search-box.mjs';
|
|
5
|
+
/**
|
|
6
|
+
* A place on a form: a click on the map, a dragged pin, an address found,
|
|
7
|
+
* or "My location". Kept as a GeoJSON Point in a json field, or in two
|
|
8
|
+
* number fields (`latitude` with `options.longitudeField`), the way Odoo
|
|
9
|
+
* keeps a partner's place. The coordinates stay typeable under the map:
|
|
10
|
+
* that is the way in without a mouse, beside Enter on the map (the place
|
|
11
|
+
* at its centre) and the arrow keys on the pin.
|
|
12
|
+
*
|
|
13
|
+
* Options: `longitudeField`, `addressField` (filled from the address
|
|
14
|
+
* found, or named from the point where the provider can), `myLocation`
|
|
15
|
+
* (on unless false), `search` (on unless false), `zoom` (15), `height`.
|
|
16
|
+
*/
|
|
17
|
+
const PIN = `<svg viewBox="0 0 28 40" aria-hidden="true"><path class="fd-map-pin-body" d="M14 1C6.8 1 1 6.7 1 13.8 1 23.6 14 39 14 39s13-15.4 13-25.2C27 6.7 21.2 1 14 1z"/><circle class="fd-map-pin-dot" cx="14" cy="14" r="5"/></svg>`;
|
|
18
|
+
const round6 = (n) => Math.round(n * 1e6) / 1e6;
|
|
19
|
+
export function placeWidget(settings) {
|
|
20
|
+
return (context) => {
|
|
21
|
+
const { form, name, field, node, id, document: doc } = context;
|
|
22
|
+
const options = node.options ?? {};
|
|
23
|
+
const labels = mapLabels(context.locale, settings.labels?.[context.locale ?? 'en']);
|
|
24
|
+
const longitudeField = typeof options['longitudeField'] === 'string' ? options['longitudeField'] : null;
|
|
25
|
+
const addressField = typeof options['addressField'] === 'string' ? options['addressField'] : null;
|
|
26
|
+
const inFields = field.type === 'float';
|
|
27
|
+
if (inFields && !longitudeField)
|
|
28
|
+
throw new Error(`The place on "${name}" keeps its latitude there and needs options.longitudeField for its longitude`);
|
|
29
|
+
const zoom = typeof options['zoom'] === 'number' ? options['zoom'] : 15;
|
|
30
|
+
const search = options['search'] === false ? undefined : (settings.search ?? settings.provider.search);
|
|
31
|
+
const reverse = settings.reverse ?? settings.provider.reverse;
|
|
32
|
+
const asYouType = settings.search ? (settings.searchAsYouType ?? true) : !!settings.provider.searchAsYouType;
|
|
33
|
+
const geolocation = options['myLocation'] === false ? undefined : doc.defaultView?.navigator.geolocation;
|
|
34
|
+
let readonly = false;
|
|
35
|
+
let point = null;
|
|
36
|
+
/** The address this field last wrote: one a person typed is never written over. */
|
|
37
|
+
let addressWritten;
|
|
38
|
+
let values = form.getState().values;
|
|
39
|
+
const element = doc.createElement('div');
|
|
40
|
+
element.className = 'fd-map-field fd-place';
|
|
41
|
+
element.setAttribute('role', 'group');
|
|
42
|
+
element.setAttribute('aria-labelledby', `${id}-label`);
|
|
43
|
+
const tools = doc.createElement('div');
|
|
44
|
+
tools.className = 'fd-map-tools';
|
|
45
|
+
const note = doc.createElement('p');
|
|
46
|
+
note.className = 'fd-map-note';
|
|
47
|
+
note.setAttribute('aria-live', 'polite');
|
|
48
|
+
note.hidden = true;
|
|
49
|
+
const say = (words, tone) => {
|
|
50
|
+
note.textContent = words ?? '';
|
|
51
|
+
note.hidden = !words;
|
|
52
|
+
if (tone)
|
|
53
|
+
note.dataset['tone'] = tone;
|
|
54
|
+
else
|
|
55
|
+
delete note.dataset['tone'];
|
|
56
|
+
};
|
|
57
|
+
const box = createMapBox({
|
|
58
|
+
document: doc,
|
|
59
|
+
provider: settings.provider,
|
|
60
|
+
locale: context.locale ?? 'en',
|
|
61
|
+
labels,
|
|
62
|
+
name: field.label,
|
|
63
|
+
keys: labels.placeKeys,
|
|
64
|
+
center: settings.center,
|
|
65
|
+
zoom: settings.center ? (settings.zoom ?? 11) : undefined,
|
|
66
|
+
height: typeof options['height'] === 'number' ? options['height'] : undefined,
|
|
67
|
+
});
|
|
68
|
+
// ---- the coordinates, typeable -------------------------------------------
|
|
69
|
+
const coords = doc.createElement('div');
|
|
70
|
+
coords.className = 'fd-map-coords';
|
|
71
|
+
const coordinate = (words, inputId) => {
|
|
72
|
+
const label = doc.createElement('label');
|
|
73
|
+
const input = doc.createElement('input');
|
|
74
|
+
input.className = 'fd-input';
|
|
75
|
+
input.id = inputId;
|
|
76
|
+
input.inputMode = 'decimal';
|
|
77
|
+
input.autocomplete = 'off';
|
|
78
|
+
input.spellcheck = false;
|
|
79
|
+
label.append(words, input);
|
|
80
|
+
coords.append(label);
|
|
81
|
+
return input;
|
|
82
|
+
};
|
|
83
|
+
const lat = coordinate(labels.latitude, search ? `${id}-lat` : id);
|
|
84
|
+
const lng = coordinate(labels.longitude, `${id}-lng`);
|
|
85
|
+
const typed = () => {
|
|
86
|
+
const a = parseCoordinate(lat.value);
|
|
87
|
+
const b = parseCoordinate(lng.value);
|
|
88
|
+
const empty = !lat.value.trim() && !lng.value.trim();
|
|
89
|
+
const good = empty || isLatLng(a, b);
|
|
90
|
+
lat.setAttribute('aria-invalid', String(!good || (a !== null && Math.abs(a) > 90)));
|
|
91
|
+
lng.setAttribute('aria-invalid', String(!good || (b !== null && Math.abs(b) > 180)));
|
|
92
|
+
if (!good)
|
|
93
|
+
return say(labels.notACoordinate, 'error');
|
|
94
|
+
say(null);
|
|
95
|
+
if (empty)
|
|
96
|
+
return set(null);
|
|
97
|
+
set({ lat: a, lng: b }, { fly: true, name: true });
|
|
98
|
+
};
|
|
99
|
+
for (const input of [lat, lng]) {
|
|
100
|
+
input.addEventListener('change', typed);
|
|
101
|
+
input.addEventListener('keydown', (event) => event.key === 'Enter' && (event.preventDefault(), typed()));
|
|
102
|
+
}
|
|
103
|
+
// ---- writing ---------------------------------------------------------------
|
|
104
|
+
function write(next) {
|
|
105
|
+
if (inFields) {
|
|
106
|
+
form.setValue(name, next ? round6(next.lat) : null);
|
|
107
|
+
form.setValue(longitudeField, next ? round6(next.lng) : null);
|
|
108
|
+
}
|
|
109
|
+
else
|
|
110
|
+
form.setValue(name, next ? asJson(writePoint(next)) : null);
|
|
111
|
+
}
|
|
112
|
+
let naming = null;
|
|
113
|
+
/** The address from the point, where the provider can say one, unless a person typed their own. */
|
|
114
|
+
function nameFrom(at) {
|
|
115
|
+
if (!addressField || !reverse)
|
|
116
|
+
return;
|
|
117
|
+
const current = values[addressField];
|
|
118
|
+
if (current !== null && current !== undefined && current !== '' && current !== addressWritten)
|
|
119
|
+
return;
|
|
120
|
+
naming?.abort();
|
|
121
|
+
naming = new AbortController();
|
|
122
|
+
reverse({ ...at, locale: context.locale ?? 'en', signal: naming.signal })
|
|
123
|
+
.then((label) => {
|
|
124
|
+
if (!label)
|
|
125
|
+
return;
|
|
126
|
+
addressWritten = label;
|
|
127
|
+
form.setValue(addressField, label);
|
|
128
|
+
})
|
|
129
|
+
.catch(() => undefined);
|
|
130
|
+
}
|
|
131
|
+
function set(next, how = {}) {
|
|
132
|
+
if (readonly)
|
|
133
|
+
return;
|
|
134
|
+
if (next)
|
|
135
|
+
next = { lat: round6(next.lat), lng: round6(next.lng) };
|
|
136
|
+
point = next;
|
|
137
|
+
show(how.fly);
|
|
138
|
+
write(next);
|
|
139
|
+
if (next && how.address !== undefined && addressField) {
|
|
140
|
+
addressWritten = how.address;
|
|
141
|
+
form.setValue(addressField, how.address);
|
|
142
|
+
}
|
|
143
|
+
else if (next && how.name)
|
|
144
|
+
nameFrom(next);
|
|
145
|
+
}
|
|
146
|
+
// ---- the map and its pin ---------------------------------------------------
|
|
147
|
+
let marker = null;
|
|
148
|
+
function show(fly = false) {
|
|
149
|
+
clear.hidden = readonly || !point;
|
|
150
|
+
box.ready((map, L) => {
|
|
151
|
+
if (!point) {
|
|
152
|
+
marker?.remove();
|
|
153
|
+
marker = null;
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
const at = [point.lat, point.lng];
|
|
157
|
+
if (!marker)
|
|
158
|
+
marker = makeMarker(map, L, at);
|
|
159
|
+
else
|
|
160
|
+
marker.setLatLng(at);
|
|
161
|
+
if (marker.dragging) {
|
|
162
|
+
if (readonly)
|
|
163
|
+
marker.dragging.disable();
|
|
164
|
+
else
|
|
165
|
+
marker.dragging.enable();
|
|
166
|
+
}
|
|
167
|
+
marker.getElement()?.setAttribute('aria-label', `${field.label}: ${point.lat}, ${point.lng}`);
|
|
168
|
+
if (fly)
|
|
169
|
+
map.setView(at, Math.max(map.getZoom(), zoom));
|
|
170
|
+
else if (!map.getBounds().contains(at))
|
|
171
|
+
map.setView(at, map.getZoom() < 5 ? zoom : map.getZoom());
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
function makeMarker(map, L, at) {
|
|
175
|
+
const icon = L.divIcon({ className: 'fd-map-pin', html: PIN, iconSize: [28, 40], iconAnchor: [14, 39] });
|
|
176
|
+
const pin = L.marker(at, { icon, draggable: !readonly, keyboard: true, autoPan: true }).addTo(map);
|
|
177
|
+
pin.on('dragend', () => {
|
|
178
|
+
const moved = pin.getLatLng();
|
|
179
|
+
set({ lat: moved.lat, lng: moved.lng }, { name: true });
|
|
180
|
+
});
|
|
181
|
+
// The arrow keys carry the pin a few pixels; Shift, further.
|
|
182
|
+
pin.getElement()?.addEventListener('keydown', (event) => {
|
|
183
|
+
const step = event.shiftKey ? 16 : 4;
|
|
184
|
+
const by = { ArrowUp: [0, -step], ArrowDown: [0, step], ArrowLeft: [-step, 0], ArrowRight: [step, 0] }[event.key];
|
|
185
|
+
if (!by || readonly)
|
|
186
|
+
return;
|
|
187
|
+
event.preventDefault();
|
|
188
|
+
event.stopPropagation();
|
|
189
|
+
const there = map.containerPointToLatLng(map.latLngToContainerPoint(pin.getLatLng()).add(L.point(by[0], by[1])));
|
|
190
|
+
set({ lat: there.lat, lng: there.lng }, { name: true });
|
|
191
|
+
});
|
|
192
|
+
return pin;
|
|
193
|
+
}
|
|
194
|
+
box.ready((map) => {
|
|
195
|
+
map.on('click', (event) => set({ lat: event.latlng.lat, lng: event.latlng.lng }, { name: true }));
|
|
196
|
+
// Enter on the map: the place at its centre, where the cross is.
|
|
197
|
+
box.element.addEventListener('keydown', (event) => {
|
|
198
|
+
if ((event.key !== 'Enter' && event.key !== ' ') || event.target !== box.element || readonly)
|
|
199
|
+
return;
|
|
200
|
+
event.preventDefault();
|
|
201
|
+
const centre = map.getCenter();
|
|
202
|
+
set({ lat: centre.lat, lng: centre.lng }, { name: true });
|
|
203
|
+
});
|
|
204
|
+
show(true);
|
|
205
|
+
});
|
|
206
|
+
// ---- search, my location, clear ---------------------------------------------
|
|
207
|
+
const found = search
|
|
208
|
+
? searchBox({
|
|
209
|
+
document: doc,
|
|
210
|
+
id: lat.id === id ? `${id}-search` : id,
|
|
211
|
+
labels,
|
|
212
|
+
search,
|
|
213
|
+
asYouType: asYouType,
|
|
214
|
+
locale: context.locale ?? 'en',
|
|
215
|
+
near: () => point ?? settings.center,
|
|
216
|
+
pick: (place) => set({ lat: place.lat, lng: place.lng }, { fly: true, address: place.label }),
|
|
217
|
+
say,
|
|
218
|
+
})
|
|
219
|
+
: null;
|
|
220
|
+
if (found)
|
|
221
|
+
tools.append(found.element);
|
|
222
|
+
const myLocation = doc.createElement('button');
|
|
223
|
+
myLocation.type = 'button';
|
|
224
|
+
myLocation.className = 'fd-button';
|
|
225
|
+
myLocation.innerHTML = '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><circle cx="12" cy="12" r="4"/><path d="M12 2v3M12 19v3M2 12h3M19 12h3"/></svg>';
|
|
226
|
+
myLocation.append(labels.myLocation);
|
|
227
|
+
let blocked = false;
|
|
228
|
+
myLocation.hidden = !geolocation;
|
|
229
|
+
myLocation.addEventListener('click', () => {
|
|
230
|
+
if (!geolocation)
|
|
231
|
+
return;
|
|
232
|
+
say(labels.locating);
|
|
233
|
+
geolocation.getCurrentPosition((position) => {
|
|
234
|
+
say(null);
|
|
235
|
+
set({ lat: position.coords.latitude, lng: position.coords.longitude }, { fly: true, name: true });
|
|
236
|
+
}, (error) => {
|
|
237
|
+
if (error.code === error.PERMISSION_DENIED) {
|
|
238
|
+
blocked = true;
|
|
239
|
+
myLocation.hidden = true;
|
|
240
|
+
say(labels.locationBlocked);
|
|
241
|
+
}
|
|
242
|
+
else
|
|
243
|
+
say(labels.locationFailed, 'error');
|
|
244
|
+
}, { enableHighAccuracy: true, timeout: 10_000, maximumAge: 60_000 });
|
|
245
|
+
});
|
|
246
|
+
// Location blocked for the site: the button goes, with the reason in its place.
|
|
247
|
+
doc.defaultView?.navigator.permissions
|
|
248
|
+
?.query({ name: 'geolocation' })
|
|
249
|
+
.then((status) => {
|
|
250
|
+
const read = () => {
|
|
251
|
+
blocked = status.state === 'denied';
|
|
252
|
+
myLocation.hidden = !geolocation || blocked || readonly;
|
|
253
|
+
if (blocked)
|
|
254
|
+
say(labels.locationBlocked);
|
|
255
|
+
};
|
|
256
|
+
read();
|
|
257
|
+
status.onchange = read;
|
|
258
|
+
})
|
|
259
|
+
.catch(() => undefined);
|
|
260
|
+
const clear = doc.createElement('button');
|
|
261
|
+
clear.type = 'button';
|
|
262
|
+
clear.className = 'fd-button fd-button-link';
|
|
263
|
+
clear.textContent = labels.clear;
|
|
264
|
+
clear.hidden = true;
|
|
265
|
+
clear.addEventListener('click', () => {
|
|
266
|
+
set(null);
|
|
267
|
+
say(null);
|
|
268
|
+
(found?.input ?? lat).focus();
|
|
269
|
+
});
|
|
270
|
+
tools.append(myLocation, clear);
|
|
271
|
+
element.append(tools, box.element, coords, note);
|
|
272
|
+
const showCoords = () => {
|
|
273
|
+
for (const [input, n] of [[lat, point?.lat], [lng, point?.lng]]) {
|
|
274
|
+
if (doc.activeElement === input)
|
|
275
|
+
continue;
|
|
276
|
+
input.value = n === undefined ? '' : String(n);
|
|
277
|
+
input.setAttribute('aria-invalid', 'false');
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
return {
|
|
281
|
+
element,
|
|
282
|
+
focus: () => (found?.input ?? lat).focus(),
|
|
283
|
+
destroy: () => {
|
|
284
|
+
naming?.abort();
|
|
285
|
+
found?.destroy();
|
|
286
|
+
box.destroy();
|
|
287
|
+
},
|
|
288
|
+
update(state) {
|
|
289
|
+
values = state.values;
|
|
290
|
+
readonly = state.readonly;
|
|
291
|
+
const next = inFields
|
|
292
|
+
? isLatLng(state.value, state.values[longitudeField])
|
|
293
|
+
? { lat: state.value, lng: state.values[longitudeField] }
|
|
294
|
+
: null
|
|
295
|
+
: readPoint(state.value);
|
|
296
|
+
const changed = next?.lat !== point?.lat || next?.lng !== point?.lng;
|
|
297
|
+
point = next;
|
|
298
|
+
tools.hidden = readonly;
|
|
299
|
+
myLocation.hidden = !geolocation || blocked || readonly;
|
|
300
|
+
for (const input of [lat, lng])
|
|
301
|
+
input.readOnly = readonly;
|
|
302
|
+
const target = found?.input ?? lat;
|
|
303
|
+
target.setAttribute('aria-invalid', String(state.invalid));
|
|
304
|
+
target.setAttribute('aria-required', String(state.required));
|
|
305
|
+
if (state.describedBy)
|
|
306
|
+
target.setAttribute('aria-describedby', state.describedBy);
|
|
307
|
+
else
|
|
308
|
+
target.removeAttribute('aria-describedby');
|
|
309
|
+
lat.setAttribute('aria-required', String(state.required));
|
|
310
|
+
showCoords();
|
|
311
|
+
box.refresh();
|
|
312
|
+
if (changed)
|
|
313
|
+
show();
|
|
314
|
+
else
|
|
315
|
+
clear.hidden = readonly || !point;
|
|
316
|
+
},
|
|
317
|
+
};
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=place.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"place.mjs","sourceRoot":"","sources":["../../../../../libs/map/src/lib/place.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import type { Locale } from '@fieldia/core';
|
|
2
|
+
import type { Bounds, LatLng } from './geo.mjs';
|
|
3
|
+
/**
|
|
4
|
+
* Where a map's images, credits and address search come from. Every map in
|
|
5
|
+
* the package draws through one of these, so an app changes provider in one
|
|
6
|
+
* place and nothing else moves. Keys never live in Fieldia: the app passes
|
|
7
|
+
* them, or a function that fetches a short-lived token from its own server.
|
|
8
|
+
* Credits are text and links built here, never HTML from a provider.
|
|
9
|
+
*/
|
|
10
|
+
export type BaseMap = 'road' | 'dark' | 'satellite';
|
|
11
|
+
export interface TileSpec {
|
|
12
|
+
/** With `{z}`, `{x}` and `{y}` where the tile's numbers go. */
|
|
13
|
+
url: string;
|
|
14
|
+
maxZoom: number;
|
|
15
|
+
tileSize?: number;
|
|
16
|
+
zoomOffset?: number;
|
|
17
|
+
/** Headers each image is fetched with: a token that must not sit in an address. */
|
|
18
|
+
headers?: () => Promise<Record<string, string>>;
|
|
19
|
+
}
|
|
20
|
+
export interface Credit {
|
|
21
|
+
text: string;
|
|
22
|
+
href?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface MapView {
|
|
25
|
+
zoom: number;
|
|
26
|
+
bounds: Bounds;
|
|
27
|
+
}
|
|
28
|
+
export interface PlaceFound {
|
|
29
|
+
label: string;
|
|
30
|
+
lat: number;
|
|
31
|
+
lng: number;
|
|
32
|
+
}
|
|
33
|
+
export interface SearchRequest {
|
|
34
|
+
text: string;
|
|
35
|
+
/** Where the map is: results near it first. */
|
|
36
|
+
near?: LatLng;
|
|
37
|
+
locale: Locale;
|
|
38
|
+
signal?: AbortSignal;
|
|
39
|
+
}
|
|
40
|
+
export type AddressSearch = (request: SearchRequest) => Promise<PlaceFound[]>;
|
|
41
|
+
export type ReverseSearch = (at: LatLng & {
|
|
42
|
+
locale: Locale;
|
|
43
|
+
signal?: AbortSignal;
|
|
44
|
+
}) => Promise<string | null>;
|
|
45
|
+
export interface MapProvider {
|
|
46
|
+
readonly id: string;
|
|
47
|
+
/** The map images of a kind, or null when the provider has none of it. */
|
|
48
|
+
tiles(kind: BaseMap, locale: Locale): Promise<TileSpec | null>;
|
|
49
|
+
/** What must be credited under the map, for what is in view. */
|
|
50
|
+
credits(kind: BaseMap, view: MapView, locale: Locale): Promise<Credit[]>;
|
|
51
|
+
/** The provider's mark, which its terms ask for in the map's corner. */
|
|
52
|
+
readonly logo?: {
|
|
53
|
+
text: string;
|
|
54
|
+
image?: string;
|
|
55
|
+
href?: string;
|
|
56
|
+
};
|
|
57
|
+
readonly search?: AddressSearch;
|
|
58
|
+
readonly reverse?: ReverseSearch;
|
|
59
|
+
/** Whether its terms allow a search for each pause in typing; otherwise it searches when Enter is pressed. */
|
|
60
|
+
readonly searchAsYouType?: boolean;
|
|
61
|
+
/** Free for trying things out, not for an app in use: a warning says so once. */
|
|
62
|
+
readonly demoOnly?: boolean;
|
|
63
|
+
}
|
|
64
|
+
type Fetch = typeof globalThis.fetch;
|
|
65
|
+
export interface OpenStreetMapOptions {
|
|
66
|
+
fetch?: Fetch;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* OpenStreetMap's own map images and Nominatim's search: free, for demos and
|
|
70
|
+
* development only. Their usage policies treat an app in production as heavy
|
|
71
|
+
* use, and Nominatim's forbids searching as people type.
|
|
72
|
+
*/
|
|
73
|
+
export declare function openStreetMap(options?: OpenStreetMapOptions): MapProvider;
|
|
74
|
+
export interface AzureMapsOptions {
|
|
75
|
+
/** A subscription key, restricted to the app's sites in Azure. */
|
|
76
|
+
key?: string;
|
|
77
|
+
/** Or a Microsoft Entra token, fetched from the app's own server; sent in a header with `clientId`. */
|
|
78
|
+
token?: () => Promise<string>;
|
|
79
|
+
clientId?: string;
|
|
80
|
+
fetch?: Fetch;
|
|
81
|
+
}
|
|
82
|
+
/** Microsoft Azure Maps: road, dark and satellite map images, credits for the view, and address search. */
|
|
83
|
+
export declare function azureMaps(options: AzureMapsOptions): MapProvider;
|
|
84
|
+
export interface GoogleMapsOptions {
|
|
85
|
+
key: string;
|
|
86
|
+
/** The country whose borders and names the map follows (CLDR, such as `EG`). */
|
|
87
|
+
region?: string;
|
|
88
|
+
/** Google's logo, as an image the app serves; its name is shown in its place until one is given. */
|
|
89
|
+
logo?: string;
|
|
90
|
+
fetch?: Fetch;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Google's map images through its Map Tiles API: a session for each kind and
|
|
94
|
+
* language, credits for the view, and Google's mark in the corner its terms
|
|
95
|
+
* name. Address search is the app's own here.
|
|
96
|
+
*/
|
|
97
|
+
export declare function googleMaps(options: GoogleMapsOptions): MapProvider;
|
|
98
|
+
export interface MapboxOptions {
|
|
99
|
+
token: string;
|
|
100
|
+
/** Style ids, `owner/style`. */
|
|
101
|
+
style?: string;
|
|
102
|
+
darkStyle?: string;
|
|
103
|
+
satelliteStyle?: string;
|
|
104
|
+
/** Mapbox's wordmark, as an image the app serves; its name is shown until one is given. */
|
|
105
|
+
logo?: string;
|
|
106
|
+
/**
|
|
107
|
+
* Ask for results the app may keep (Mapbox's permanent geocoding). On by
|
|
108
|
+
* default, because a place field keeps what it finds; off only for an app
|
|
109
|
+
* that stores nothing.
|
|
110
|
+
*/
|
|
111
|
+
permanent?: boolean;
|
|
112
|
+
fetch?: Fetch;
|
|
113
|
+
}
|
|
114
|
+
/** Mapbox: its styles as map images, its credits and wordmark, and its address search as people type. */
|
|
115
|
+
export declare function mapbox(options: MapboxOptions): MapProvider;
|
|
116
|
+
export interface TilesOptions {
|
|
117
|
+
/** With `{z}`, `{x}` and `{y}`: the app's own map images, or any provider's. */
|
|
118
|
+
url: string;
|
|
119
|
+
darkUrl?: string;
|
|
120
|
+
satelliteUrl?: string;
|
|
121
|
+
credit: Credit | Credit[];
|
|
122
|
+
maxZoom?: number;
|
|
123
|
+
tileSize?: number;
|
|
124
|
+
zoomOffset?: number;
|
|
125
|
+
search?: AddressSearch;
|
|
126
|
+
reverse?: ReverseSearch;
|
|
127
|
+
searchAsYouType?: boolean;
|
|
128
|
+
}
|
|
129
|
+
/** Map images from any address, such as the app's own server, with their credit. */
|
|
130
|
+
export declare function tiles(options: TilesOptions): MapProvider;
|
|
131
|
+
export {};
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import type { Locale } from '@fieldia/core';
|
|
2
|
+
import type { Bounds, LatLng } from './geo';
|
|
3
|
+
/**
|
|
4
|
+
* Where a map's images, credits and address search come from. Every map in
|
|
5
|
+
* the package draws through one of these, so an app changes provider in one
|
|
6
|
+
* place and nothing else moves. Keys never live in Fieldia: the app passes
|
|
7
|
+
* them, or a function that fetches a short-lived token from its own server.
|
|
8
|
+
* Credits are text and links built here, never HTML from a provider.
|
|
9
|
+
*/
|
|
10
|
+
export type BaseMap = 'road' | 'dark' | 'satellite';
|
|
11
|
+
export interface TileSpec {
|
|
12
|
+
/** With `{z}`, `{x}` and `{y}` where the tile's numbers go. */
|
|
13
|
+
url: string;
|
|
14
|
+
maxZoom: number;
|
|
15
|
+
tileSize?: number;
|
|
16
|
+
zoomOffset?: number;
|
|
17
|
+
/** Headers each image is fetched with: a token that must not sit in an address. */
|
|
18
|
+
headers?: () => Promise<Record<string, string>>;
|
|
19
|
+
}
|
|
20
|
+
export interface Credit {
|
|
21
|
+
text: string;
|
|
22
|
+
href?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface MapView {
|
|
25
|
+
zoom: number;
|
|
26
|
+
bounds: Bounds;
|
|
27
|
+
}
|
|
28
|
+
export interface PlaceFound {
|
|
29
|
+
label: string;
|
|
30
|
+
lat: number;
|
|
31
|
+
lng: number;
|
|
32
|
+
}
|
|
33
|
+
export interface SearchRequest {
|
|
34
|
+
text: string;
|
|
35
|
+
/** Where the map is: results near it first. */
|
|
36
|
+
near?: LatLng;
|
|
37
|
+
locale: Locale;
|
|
38
|
+
signal?: AbortSignal;
|
|
39
|
+
}
|
|
40
|
+
export type AddressSearch = (request: SearchRequest) => Promise<PlaceFound[]>;
|
|
41
|
+
export type ReverseSearch = (at: LatLng & {
|
|
42
|
+
locale: Locale;
|
|
43
|
+
signal?: AbortSignal;
|
|
44
|
+
}) => Promise<string | null>;
|
|
45
|
+
export interface MapProvider {
|
|
46
|
+
readonly id: string;
|
|
47
|
+
/** The map images of a kind, or null when the provider has none of it. */
|
|
48
|
+
tiles(kind: BaseMap, locale: Locale): Promise<TileSpec | null>;
|
|
49
|
+
/** What must be credited under the map, for what is in view. */
|
|
50
|
+
credits(kind: BaseMap, view: MapView, locale: Locale): Promise<Credit[]>;
|
|
51
|
+
/** The provider's mark, which its terms ask for in the map's corner. */
|
|
52
|
+
readonly logo?: {
|
|
53
|
+
text: string;
|
|
54
|
+
image?: string;
|
|
55
|
+
href?: string;
|
|
56
|
+
};
|
|
57
|
+
readonly search?: AddressSearch;
|
|
58
|
+
readonly reverse?: ReverseSearch;
|
|
59
|
+
/** Whether its terms allow a search for each pause in typing; otherwise it searches when Enter is pressed. */
|
|
60
|
+
readonly searchAsYouType?: boolean;
|
|
61
|
+
/** Free for trying things out, not for an app in use: a warning says so once. */
|
|
62
|
+
readonly demoOnly?: boolean;
|
|
63
|
+
}
|
|
64
|
+
type Fetch = typeof globalThis.fetch;
|
|
65
|
+
export interface OpenStreetMapOptions {
|
|
66
|
+
fetch?: Fetch;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* OpenStreetMap's own map images and Nominatim's search: free, for demos and
|
|
70
|
+
* development only. Their usage policies treat an app in production as heavy
|
|
71
|
+
* use, and Nominatim's forbids searching as people type.
|
|
72
|
+
*/
|
|
73
|
+
export declare function openStreetMap(options?: OpenStreetMapOptions): MapProvider;
|
|
74
|
+
export interface AzureMapsOptions {
|
|
75
|
+
/** A subscription key, restricted to the app's sites in Azure. */
|
|
76
|
+
key?: string;
|
|
77
|
+
/** Or a Microsoft Entra token, fetched from the app's own server; sent in a header with `clientId`. */
|
|
78
|
+
token?: () => Promise<string>;
|
|
79
|
+
clientId?: string;
|
|
80
|
+
fetch?: Fetch;
|
|
81
|
+
}
|
|
82
|
+
/** Microsoft Azure Maps: road, dark and satellite map images, credits for the view, and address search. */
|
|
83
|
+
export declare function azureMaps(options: AzureMapsOptions): MapProvider;
|
|
84
|
+
export interface GoogleMapsOptions {
|
|
85
|
+
key: string;
|
|
86
|
+
/** The country whose borders and names the map follows (CLDR, such as `EG`). */
|
|
87
|
+
region?: string;
|
|
88
|
+
/** Google's logo, as an image the app serves; its name is shown in its place until one is given. */
|
|
89
|
+
logo?: string;
|
|
90
|
+
fetch?: Fetch;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Google's map images through its Map Tiles API: a session for each kind and
|
|
94
|
+
* language, credits for the view, and Google's mark in the corner its terms
|
|
95
|
+
* name. Address search is the app's own here.
|
|
96
|
+
*/
|
|
97
|
+
export declare function googleMaps(options: GoogleMapsOptions): MapProvider;
|
|
98
|
+
export interface MapboxOptions {
|
|
99
|
+
token: string;
|
|
100
|
+
/** Style ids, `owner/style`. */
|
|
101
|
+
style?: string;
|
|
102
|
+
darkStyle?: string;
|
|
103
|
+
satelliteStyle?: string;
|
|
104
|
+
/** Mapbox's wordmark, as an image the app serves; its name is shown until one is given. */
|
|
105
|
+
logo?: string;
|
|
106
|
+
/**
|
|
107
|
+
* Ask for results the app may keep (Mapbox's permanent geocoding). On by
|
|
108
|
+
* default, because a place field keeps what it finds; off only for an app
|
|
109
|
+
* that stores nothing.
|
|
110
|
+
*/
|
|
111
|
+
permanent?: boolean;
|
|
112
|
+
fetch?: Fetch;
|
|
113
|
+
}
|
|
114
|
+
/** Mapbox: its styles as map images, its credits and wordmark, and its address search as people type. */
|
|
115
|
+
export declare function mapbox(options: MapboxOptions): MapProvider;
|
|
116
|
+
export interface TilesOptions {
|
|
117
|
+
/** With `{z}`, `{x}` and `{y}`: the app's own map images, or any provider's. */
|
|
118
|
+
url: string;
|
|
119
|
+
darkUrl?: string;
|
|
120
|
+
satelliteUrl?: string;
|
|
121
|
+
credit: Credit | Credit[];
|
|
122
|
+
maxZoom?: number;
|
|
123
|
+
tileSize?: number;
|
|
124
|
+
zoomOffset?: number;
|
|
125
|
+
search?: AddressSearch;
|
|
126
|
+
reverse?: ReverseSearch;
|
|
127
|
+
searchAsYouType?: boolean;
|
|
128
|
+
}
|
|
129
|
+
/** Map images from any address, such as the app's own server, with their credit. */
|
|
130
|
+
export declare function tiles(options: TilesOptions): MapProvider;
|
|
131
|
+
export {};
|