@fieldia/map 0.17.0 → 0.19.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/README.md +75 -10
- package/package.json +4 -4
- package/src/index.d.mts +5 -0
- package/src/index.d.ts +5 -0
- package/src/index.js +4 -1
- package/src/index.js.map +1 -1
- package/src/index.mjs +2 -0
- package/src/index.mjs.map +1 -1
- package/src/lib/address-labels.d.mts +21 -0
- package/src/lib/address-labels.d.ts +21 -0
- package/src/lib/address-labels.js +16 -0
- package/src/lib/address-labels.js.map +1 -0
- package/src/lib/address-labels.mjs +12 -0
- package/src/lib/address-labels.mjs.map +1 -0
- package/src/lib/address-line.d.mts +2 -0
- package/src/lib/address-line.d.ts +2 -0
- package/src/lib/address-line.js +34 -0
- package/src/lib/address-line.js.map +1 -0
- package/src/lib/address-line.mjs +31 -0
- package/src/lib/address-line.mjs.map +1 -0
- package/src/lib/address-parts.d.mts +28 -0
- package/src/lib/address-parts.d.ts +28 -0
- package/src/lib/address-parts.js +47 -0
- package/src/lib/address-parts.js.map +1 -0
- package/src/lib/address-parts.mjs +38 -0
- package/src/lib/address-parts.mjs.map +1 -0
- package/src/lib/address-search.d.mts +21 -0
- package/src/lib/address-search.d.ts +21 -0
- package/src/lib/address-search.js +52 -0
- package/src/lib/address-search.js.map +1 -0
- package/src/lib/address-search.mjs +49 -0
- package/src/lib/address-search.mjs.map +1 -0
- package/src/lib/address-suggest.d.mts +18 -0
- package/src/lib/address-suggest.d.ts +18 -0
- package/src/lib/address-suggest.js +140 -0
- package/src/lib/address-suggest.js.map +1 -0
- package/src/lib/address-suggest.mjs +137 -0
- package/src/lib/address-suggest.mjs.map +1 -0
- package/src/lib/area-count.d.mts +47 -0
- package/src/lib/area-count.d.ts +47 -0
- package/src/lib/area-count.js +123 -0
- package/src/lib/area-count.js.map +1 -0
- package/src/lib/area-count.mjs +116 -0
- package/src/lib/area-count.mjs.map +1 -0
- package/src/lib/card.d.mts +16 -6
- package/src/lib/card.d.ts +16 -6
- package/src/lib/card.js +71 -14
- package/src/lib/card.js.map +1 -1
- package/src/lib/card.mjs +70 -14
- package/src/lib/card.mjs.map +1 -1
- package/src/lib/cluster.d.mts +6 -1
- package/src/lib/cluster.d.ts +6 -1
- package/src/lib/cluster.js +11 -5
- package/src/lib/cluster.js.map +1 -1
- package/src/lib/cluster.mjs +11 -5
- package/src/lib/cluster.mjs.map +1 -1
- package/src/lib/embed.d.mts +86 -0
- package/src/lib/embed.d.ts +86 -0
- package/src/lib/embed.js +96 -0
- package/src/lib/embed.js.map +1 -0
- package/src/lib/embed.mjs +93 -0
- package/src/lib/embed.mjs.map +1 -0
- package/src/lib/form-map.d.mts +2 -1
- package/src/lib/form-map.d.ts +2 -1
- package/src/lib/form-map.js +159 -20
- package/src/lib/form-map.js.map +1 -1
- package/src/lib/form-map.mjs +161 -22
- package/src/lib/form-map.mjs.map +1 -1
- package/src/lib/kinds.d.mts +6 -4
- package/src/lib/kinds.d.ts +6 -4
- package/src/lib/kinds.js +49 -2
- package/src/lib/kinds.js.map +1 -1
- package/src/lib/kinds.mjs +49 -2
- package/src/lib/kinds.mjs.map +1 -1
- package/src/lib/labels.d.mts +5 -0
- package/src/lib/labels.d.ts +5 -0
- package/src/lib/labels.js +12 -4
- package/src/lib/labels.js.map +1 -1
- package/src/lib/labels.mjs +12 -4
- package/src/lib/labels.mjs.map +1 -1
- package/src/lib/leaflet.js +1 -0
- package/src/lib/leaflet.js.map +1 -1
- package/src/lib/leaflet.mjs +1 -0
- package/src/lib/leaflet.mjs.map +1 -1
- package/src/lib/list-view.d.mts +37 -1
- package/src/lib/list-view.d.ts +37 -1
- package/src/lib/list-view.js +103 -50
- package/src/lib/list-view.js.map +1 -1
- package/src/lib/list-view.mjs +103 -51
- package/src/lib/list-view.mjs.map +1 -1
- package/src/lib/map-core.d.mts +8 -3
- package/src/lib/map-core.d.ts +8 -3
- package/src/lib/map-core.js +21 -10
- package/src/lib/map-core.js.map +1 -1
- package/src/lib/map-core.mjs +21 -10
- package/src/lib/map-core.mjs.map +1 -1
- package/src/lib/marks.d.mts +11 -0
- package/src/lib/marks.d.ts +11 -0
- package/src/lib/marks.js +26 -1
- package/src/lib/marks.js.map +1 -1
- package/src/lib/marks.mjs +23 -0
- package/src/lib/marks.mjs.map +1 -1
- package/src/lib/pins.d.mts +20 -8
- package/src/lib/pins.d.ts +20 -8
- package/src/lib/pins.js +60 -15
- package/src/lib/pins.js.map +1 -1
- package/src/lib/pins.mjs +60 -17
- package/src/lib/pins.mjs.map +1 -1
- package/src/lib/place.js +2 -1
- package/src/lib/place.js.map +1 -1
- package/src/lib/place.mjs +2 -1
- package/src/lib/place.mjs.map +1 -1
- package/src/lib/providers.d.mts +31 -5
- package/src/lib/providers.d.ts +31 -5
- package/src/lib/providers.js +80 -58
- package/src/lib/providers.js.map +1 -1
- package/src/lib/providers.mjs +80 -58
- package/src/lib/providers.mjs.map +1 -1
- package/src/lib/regions.js +18 -1
- package/src/lib/regions.js.map +1 -1
- package/src/lib/regions.mjs +18 -1
- package/src/lib/regions.mjs.map +1 -1
- package/src/lib/search-box.d.mts +7 -1
- package/src/lib/search-box.d.ts +7 -1
- package/src/lib/search-box.js +15 -10
- package/src/lib/search-box.js.map +1 -1
- package/src/lib/search-box.mjs +15 -10
- package/src/lib/search-box.mjs.map +1 -1
- package/src/lib/settings.d.mts +19 -2
- package/src/lib/settings.d.ts +19 -2
- package/src/lib/styles.d.mts +13 -2
- package/src/lib/styles.d.ts +13 -2
- package/src/lib/styles.js +69 -4
- package/src/lib/styles.js.map +1 -1
- package/src/lib/styles.mjs +67 -3
- package/src/lib/styles.mjs.map +1 -1
- package/src/lib/tools.d.mts +6 -3
- package/src/lib/tools.d.ts +6 -3
- package/src/lib/tools.js +52 -1
- package/src/lib/tools.js.map +1 -1
- package/src/lib/tools.mjs +52 -1
- package/src/lib/tools.mjs.map +1 -1
- package/src/lib/view-box.d.mts +18 -0
- package/src/lib/view-box.d.ts +18 -0
- package/src/lib/view-box.js +31 -0
- package/src/lib/view-box.js.map +1 -0
- package/src/lib/view-box.mjs +25 -0
- package/src/lib/view-box.mjs.map +1 -0
- package/src/lib/widgets.d.mts +3 -0
- package/src/lib/widgets.d.ts +3 -0
- package/src/lib/widgets.js +10 -1
- package/src/lib/widgets.js.map +1 -1
- package/src/lib/widgets.mjs +10 -1
- package/src/lib/widgets.mjs.map +1 -1
package/src/lib/tools.mjs
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import { tileLayer } from './leaflet.mjs';
|
|
2
|
+
import { warnOnce } from './map-core.mjs';
|
|
1
3
|
/**
|
|
2
4
|
* The tools under a map's zoom, those its page asks for: the satellite's
|
|
3
|
-
* images (no button where the provider has none),
|
|
5
|
+
* images (no button where the provider has none), the provider's live
|
|
6
|
+
* traffic over the map (no button where it has none), full screen (filling the
|
|
4
7
|
* window where the browser refuses the screen, as a frame may), and measuring
|
|
5
8
|
* a way (its drawing asked for as the tools come, so a key pressed straight
|
|
6
9
|
* after its press is not lost). Loaded with the first map that has any.
|
|
@@ -20,6 +23,54 @@ export function wireTools(options) {
|
|
|
20
23
|
options.satellite(on);
|
|
21
24
|
});
|
|
22
25
|
}
|
|
26
|
+
const traffic = options.provider.traffic;
|
|
27
|
+
if (tools.has('traffic') && traffic) {
|
|
28
|
+
const button = box.tool(labels.traffic, '<rect x="7" y="2" width="10" height="20" rx="3"/><circle cx="12" cy="7" r="1.5"/><circle cx="12" cy="12" r="1.5"/><circle cx="12" cy="17" r="1.5"/>');
|
|
29
|
+
// None from the provider: no such button, as with no traffic at all.
|
|
30
|
+
button.hidden = true;
|
|
31
|
+
void traffic('road', locale).then((spec) => (button.hidden = !spec), () => (button.hidden = true));
|
|
32
|
+
let on = false;
|
|
33
|
+
let layer = null;
|
|
34
|
+
let asked = 0;
|
|
35
|
+
let timer;
|
|
36
|
+
/**
|
|
37
|
+
* The traffic for the map images drawn now (Azure's has colours of its own
|
|
38
|
+
* over the dark map): over them, under the routes and pins; drawn again
|
|
39
|
+
* as it goes out of date, the new over the old until it has come.
|
|
40
|
+
*/
|
|
41
|
+
const draw = async () => {
|
|
42
|
+
const asking = ++asked;
|
|
43
|
+
clearTimeout(timer);
|
|
44
|
+
const spec = on ? await traffic((element.dataset['baseMap'] ?? 'road'), locale).catch((error) => (warnOnce(`The ${options.provider.id} traffic could not be drawn: ${error.message}`), null)) : null;
|
|
45
|
+
if (asking !== asked)
|
|
46
|
+
return;
|
|
47
|
+
const last = layer;
|
|
48
|
+
layer = spec && tileLayer(options.L, spec.fresh ? { ...spec, url: `${spec.url}&t=${Date.now()}` } : spec);
|
|
49
|
+
if (layer) {
|
|
50
|
+
layer.options.className = 'fd-map-traffic';
|
|
51
|
+
layer.setZIndex(2).addTo(map);
|
|
52
|
+
if (spec?.fresh)
|
|
53
|
+
timer = setTimeout(draw, spec.fresh * 1000);
|
|
54
|
+
}
|
|
55
|
+
const drop = () => last?.remove();
|
|
56
|
+
if (layer && last) {
|
|
57
|
+
layer.once('load', drop);
|
|
58
|
+
setTimeout(drop, 5000);
|
|
59
|
+
}
|
|
60
|
+
else
|
|
61
|
+
drop();
|
|
62
|
+
};
|
|
63
|
+
button.addEventListener('click', () => {
|
|
64
|
+
on = !on;
|
|
65
|
+
button.setAttribute('aria-pressed', String(on));
|
|
66
|
+
options.traffic(on);
|
|
67
|
+
void draw();
|
|
68
|
+
});
|
|
69
|
+
// The map's images change kind (dark for a dark page, the satellite's): the traffic for them.
|
|
70
|
+
const watch = new MutationObserver(() => on && void draw());
|
|
71
|
+
watch.observe(element, { attributes: true, attributeFilter: ['data-base-map'] });
|
|
72
|
+
options.cleanup(() => (watch.disconnect(), clearTimeout(timer)));
|
|
73
|
+
}
|
|
23
74
|
if (tools.has('fullscreen')) {
|
|
24
75
|
const button = box.tool(labels.fullScreen, '<path d="M4 9V4h5M15 4h5v5M20 15v5h-5M9 20H4v-5"/>');
|
|
25
76
|
const mark = (on) => {
|
package/src/lib/tools.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.mjs","sourceRoot":"","sources":["../../../../../libs/map/src/lib/tools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tools.mjs","sourceRoot":"","sources":["../../../../../libs/map/src/lib/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ListMap, ResolvedFilter } from '@fieldia/core';
|
|
2
|
+
/**
|
|
3
|
+
* A map's view as a search sees it: its edges in degrees, and the
|
|
4
|
+
* conditions "Search this area" asks for its records with.
|
|
5
|
+
*/
|
|
6
|
+
/** A view's edges: west east of east when it spans the antimeridian, -180 and 180 when it is the whole world round. */
|
|
7
|
+
export interface Box {
|
|
8
|
+
south: number;
|
|
9
|
+
west: number;
|
|
10
|
+
north: number;
|
|
11
|
+
east: number;
|
|
12
|
+
}
|
|
13
|
+
/** Whether a box is the whole world round. */
|
|
14
|
+
export declare const whole: (box: Box) => boolean;
|
|
15
|
+
/** A view's box from its edges as the map has them: rounded to a millionth, its longitudes brought round into -180…180. */
|
|
16
|
+
export declare function boxOf(south: number, west: number, north: number, east: number): Box;
|
|
17
|
+
/** The conditions that keep a box's records: between a latitude's and a longitude's edges, or within it on a point. */
|
|
18
|
+
export declare function boxFilter(spec: ListMap, box: Box): ResolvedFilter[];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ListMap, ResolvedFilter } from '@fieldia/core';
|
|
2
|
+
/**
|
|
3
|
+
* A map's view as a search sees it: its edges in degrees, and the
|
|
4
|
+
* conditions "Search this area" asks for its records with.
|
|
5
|
+
*/
|
|
6
|
+
/** A view's edges: west east of east when it spans the antimeridian, -180 and 180 when it is the whole world round. */
|
|
7
|
+
export interface Box {
|
|
8
|
+
south: number;
|
|
9
|
+
west: number;
|
|
10
|
+
north: number;
|
|
11
|
+
east: number;
|
|
12
|
+
}
|
|
13
|
+
/** Whether a box is the whole world round. */
|
|
14
|
+
export declare const whole: (box: Box) => boolean;
|
|
15
|
+
/** A view's box from its edges as the map has them: rounded to a millionth, its longitudes brought round into -180…180. */
|
|
16
|
+
export declare function boxOf(south: number, west: number, north: number, east: number): Box;
|
|
17
|
+
/** The conditions that keep a box's records: between a latitude's and a longitude's edges, or within it on a point. */
|
|
18
|
+
export declare function boxFilter(spec: ListMap, box: Box): ResolvedFilter[];
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.whole = void 0;
|
|
4
|
+
exports.boxOf = boxOf;
|
|
5
|
+
exports.boxFilter = boxFilter;
|
|
6
|
+
const round = (n) => Math.round(n * 1e6) / 1e6;
|
|
7
|
+
const wrap = (lng) => round(((((lng + 180) % 360) + 360) % 360) - 180);
|
|
8
|
+
/** Whether a box is the whole world round. */
|
|
9
|
+
const whole = (box) => box.east - box.west >= 360;
|
|
10
|
+
exports.whole = whole;
|
|
11
|
+
/** A view's box from its edges as the map has them: rounded to a millionth, its longitudes brought round into -180…180. */
|
|
12
|
+
function boxOf(south, west, north, east) {
|
|
13
|
+
const all = east - west >= 360;
|
|
14
|
+
return { south: round(Math.max(-90, south)), west: all ? -180 : wrap(west), north: round(Math.min(90, north)), east: all ? 180 : wrap(east) };
|
|
15
|
+
}
|
|
16
|
+
/** The conditions that keep a box's records: between a latitude's and a longitude's edges, or within it on a point. */
|
|
17
|
+
function boxFilter(spec, box) {
|
|
18
|
+
if (spec.point)
|
|
19
|
+
return [{ field: spec.point, op: 'within', value: { ...box } }];
|
|
20
|
+
const lng = spec.longitude;
|
|
21
|
+
return [
|
|
22
|
+
{ field: spec.latitude, op: 'between', value: [box.south, box.north] },
|
|
23
|
+
// Over the antimeridian no one range holds the longitudes: either side of it, then.
|
|
24
|
+
...((0, exports.whole)(box)
|
|
25
|
+
? []
|
|
26
|
+
: box.west <= box.east
|
|
27
|
+
? [{ field: lng, op: 'between', value: [box.west, box.east] }]
|
|
28
|
+
: [{ any: [{ field: lng, op: '>=', value: box.west }, { field: lng, op: '<=', value: box.east }] }]),
|
|
29
|
+
];
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=view-box.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-box.js","sourceRoot":"","sources":["../../../../../libs/map/src/lib/view-box.ts"],"names":[],"mappings":";;;AAqBA,sBAGC;AAGD,8BAYC;AAxBD,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACvD,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAC/E,8CAA8C;AACvC,MAAM,KAAK,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;AAAjD,QAAA,KAAK,SAA4C;AAE9D,2HAA2H;AAC3H,SAAgB,KAAK,CAAC,KAAa,EAAE,IAAY,EAAE,KAAa,EAAE,IAAY;IAC5E,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,CAAC;IAC/B,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAChJ,CAAC;AAED,uHAAuH;AACvH,SAAgB,SAAS,CAAC,IAAa,EAAE,GAAQ;IAC/C,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;IAChF,MAAM,GAAG,GAAG,IAAI,CAAC,SAAmB,CAAC;IACrC,OAAO;QACL,EAAE,KAAK,EAAE,IAAI,CAAC,QAAkB,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE;QAChF,oFAAoF;QACpF,GAAG,CAAC,IAAA,aAAK,EAAC,GAAG,CAAC;YACZ,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI;gBACpB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,SAAkB,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,IAAa,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,IAAa,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;KAC3H,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const round = (n) => Math.round(n * 1e6) / 1e6;
|
|
2
|
+
const wrap = (lng) => round(((((lng + 180) % 360) + 360) % 360) - 180);
|
|
3
|
+
/** Whether a box is the whole world round. */
|
|
4
|
+
export const whole = (box) => box.east - box.west >= 360;
|
|
5
|
+
/** A view's box from its edges as the map has them: rounded to a millionth, its longitudes brought round into -180…180. */
|
|
6
|
+
export function boxOf(south, west, north, east) {
|
|
7
|
+
const all = east - west >= 360;
|
|
8
|
+
return { south: round(Math.max(-90, south)), west: all ? -180 : wrap(west), north: round(Math.min(90, north)), east: all ? 180 : wrap(east) };
|
|
9
|
+
}
|
|
10
|
+
/** The conditions that keep a box's records: between a latitude's and a longitude's edges, or within it on a point. */
|
|
11
|
+
export function boxFilter(spec, box) {
|
|
12
|
+
if (spec.point)
|
|
13
|
+
return [{ field: spec.point, op: 'within', value: { ...box } }];
|
|
14
|
+
const lng = spec.longitude;
|
|
15
|
+
return [
|
|
16
|
+
{ field: spec.latitude, op: 'between', value: [box.south, box.north] },
|
|
17
|
+
// Over the antimeridian no one range holds the longitudes: either side of it, then.
|
|
18
|
+
...(whole(box)
|
|
19
|
+
? []
|
|
20
|
+
: box.west <= box.east
|
|
21
|
+
? [{ field: lng, op: 'between', value: [box.west, box.east] }]
|
|
22
|
+
: [{ any: [{ field: lng, op: '>=', value: box.west }, { field: lng, op: '<=', value: box.east }] }]),
|
|
23
|
+
];
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=view-box.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-box.mjs","sourceRoot":"","sources":["../../../../../libs/map/src/lib/view-box.ts"],"names":[],"mappings":"AAeA,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACvD,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAC/E,8CAA8C;AAC9C,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;AAE9D,2HAA2H;AAC3H,MAAM,UAAU,KAAK,CAAC,KAAa,EAAE,IAAY,EAAE,KAAa,EAAE,IAAY;IAC5E,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,CAAC;IAC/B,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAChJ,CAAC;AAED,uHAAuH;AACvH,MAAM,UAAU,SAAS,CAAC,IAAa,EAAE,GAAQ;IAC/C,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;IAChF,MAAM,GAAG,GAAG,IAAI,CAAC,SAAmB,CAAC;IACrC,OAAO;QACL,EAAE,KAAK,EAAE,IAAI,CAAC,QAAkB,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE;QAChF,oFAAoF;QACpF,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;YACZ,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI;gBACpB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,SAAkB,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,IAAa,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,IAAa,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;KAC3H,CAAC;AACJ,CAAC"}
|
package/src/lib/widgets.d.mts
CHANGED
|
@@ -8,6 +8,9 @@ import type { MapSettings } from './settings.mjs';
|
|
|
8
8
|
* its longitude.
|
|
9
9
|
* - `"widget": "area"` on a json field keeps a GeoJSON Feature: a polygon,
|
|
10
10
|
* a box or a circle.
|
|
11
|
+
* - `"widget": "address-search"` on a char field keeps an address typed on
|
|
12
|
+
* one line, the provider's suggestions under it and no map; a suggestion
|
|
13
|
+
* picked can fill a place field and an address's parts too.
|
|
11
14
|
*
|
|
12
15
|
* Every map shares the settings given here: its provider above all.
|
|
13
16
|
*/
|
package/src/lib/widgets.d.ts
CHANGED
|
@@ -8,6 +8,9 @@ import type { MapSettings } from './settings';
|
|
|
8
8
|
* its longitude.
|
|
9
9
|
* - `"widget": "area"` on a json field keeps a GeoJSON Feature: a polygon,
|
|
10
10
|
* a box or a circle.
|
|
11
|
+
* - `"widget": "address-search"` on a char field keeps an address typed on
|
|
12
|
+
* one line, the provider's suggestions under it and no map; a suggestion
|
|
13
|
+
* picked can fill a place field and an address's parts too.
|
|
11
14
|
*
|
|
12
15
|
* Every map shares the settings given here: its provider above all.
|
|
13
16
|
*/
|
package/src/lib/widgets.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.mapWidgets = mapWidgets;
|
|
4
|
+
const address_search_1 = require("./address-search");
|
|
4
5
|
const area_1 = require("./area");
|
|
5
6
|
const place_1 = require("./place");
|
|
6
7
|
/**
|
|
@@ -11,11 +12,19 @@ const place_1 = require("./place");
|
|
|
11
12
|
* its longitude.
|
|
12
13
|
* - `"widget": "area"` on a json field keeps a GeoJSON Feature: a polygon,
|
|
13
14
|
* a box or a circle.
|
|
15
|
+
* - `"widget": "address-search"` on a char field keeps an address typed on
|
|
16
|
+
* one line, the provider's suggestions under it and no map; a suggestion
|
|
17
|
+
* picked can fill a place field and an address's parts too.
|
|
14
18
|
*
|
|
15
19
|
* Every map shares the settings given here: its provider above all.
|
|
16
20
|
*/
|
|
17
21
|
function mapWidgets(settings) {
|
|
18
22
|
const place = (0, place_1.placeWidget)(settings);
|
|
19
|
-
return {
|
|
23
|
+
return {
|
|
24
|
+
'json.place': place,
|
|
25
|
+
'float.place': place,
|
|
26
|
+
'json.area': (0, area_1.areaWidget)(settings),
|
|
27
|
+
'char.address-search': (0, address_search_1.addressSearchWidget)(settings),
|
|
28
|
+
};
|
|
20
29
|
}
|
|
21
30
|
//# sourceMappingURL=widgets.js.map
|
package/src/lib/widgets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widgets.js","sourceRoot":"","sources":["../../../../../libs/map/src/lib/widgets.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"widgets.js","sourceRoot":"","sources":["../../../../../libs/map/src/lib/widgets.ts"],"names":[],"mappings":";;AAoBA,gCAQC;AA3BD,qDAAuD;AACvD,iCAAoC;AACpC,mCAAsC;AAGtC;;;;;;;;;;;;;GAaG;AACH,SAAgB,UAAU,CAAC,QAAqB;IAC9C,MAAM,KAAK,GAAG,IAAA,mBAAW,EAAC,QAAQ,CAAC,CAAC;IACpC,OAAO;QACL,YAAY,EAAE,KAAK;QACnB,aAAa,EAAE,KAAK;QACpB,WAAW,EAAE,IAAA,iBAAU,EAAC,QAAQ,CAAC;QACjC,qBAAqB,EAAE,IAAA,oCAAmB,EAAC,QAAQ,CAAC;KACrD,CAAC;AACJ,CAAC"}
|
package/src/lib/widgets.mjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { addressSearchWidget } from './address-search.mjs';
|
|
1
2
|
import { areaWidget } from './area.mjs';
|
|
2
3
|
import { placeWidget } from './place.mjs';
|
|
3
4
|
/**
|
|
@@ -8,11 +9,19 @@ import { placeWidget } from './place.mjs';
|
|
|
8
9
|
* its longitude.
|
|
9
10
|
* - `"widget": "area"` on a json field keeps a GeoJSON Feature: a polygon,
|
|
10
11
|
* a box or a circle.
|
|
12
|
+
* - `"widget": "address-search"` on a char field keeps an address typed on
|
|
13
|
+
* one line, the provider's suggestions under it and no map; a suggestion
|
|
14
|
+
* picked can fill a place field and an address's parts too.
|
|
11
15
|
*
|
|
12
16
|
* Every map shares the settings given here: its provider above all.
|
|
13
17
|
*/
|
|
14
18
|
export function mapWidgets(settings) {
|
|
15
19
|
const place = placeWidget(settings);
|
|
16
|
-
return {
|
|
20
|
+
return {
|
|
21
|
+
'json.place': place,
|
|
22
|
+
'float.place': place,
|
|
23
|
+
'json.area': areaWidget(settings),
|
|
24
|
+
'char.address-search': addressSearchWidget(settings),
|
|
25
|
+
};
|
|
17
26
|
}
|
|
18
27
|
//# sourceMappingURL=widgets.mjs.map
|
package/src/lib/widgets.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widgets.mjs","sourceRoot":"","sources":["../../../../../libs/map/src/lib/widgets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC
|
|
1
|
+
{"version":3,"file":"widgets.mjs","sourceRoot":"","sources":["../../../../../libs/map/src/lib/widgets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,UAAU,CAAC,QAAqB;IAC9C,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO;QACL,YAAY,EAAE,KAAK;QACnB,aAAa,EAAE,KAAK;QACpB,WAAW,EAAE,UAAU,CAAC,QAAQ,CAAC;QACjC,qBAAqB,EAAE,mBAAmB,CAAC,QAAQ,CAAC;KACrD,CAAC;AACJ,CAAC"}
|